有没有办法判断小数是在C#中终止还是重复?

时间:2013-01-23 13:37:06

标签: c# math

  

可能重复:
  How to know the repeating decimal in a fraction?

有没有办法判断小数是在终止还是重复?

实施例: 我有分数:1/3并且重复小数 - 0.33333333333333333333 我有1/2分数,它终止小数 - 0.5

我不知道我该怎么做。

1 个答案:

答案 0 :(得分:4)

根据Wikipedia,如果一个分数可以k/(2^n * 5^m)的形式表示,其中k,n和m是整数,则该分数终止。

#assumes that the fraction is already fully reduced
#e.g. numerator and denominator are coprime
function isTerminating(numerator, denominator):
    while denominator % 2 == 0:
        denominator /= 2
    while denominator % 5 == 0:
        denominator /= 5
    return denominator == 1

如果你在IEEE浮点数中有分数,那么它总是终止,只要它不是NaN或+/-无穷大。浮点数中的有限数字表示为c * b^q。这些条款可能会重新排列为c / (b^-q)。 b总是2或10,因此数字符合k/(2^n * 5^m)格式,因此是终止分数。