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

Yoz*_*zer 0 c# math

可能重复:
如何知道分数中的重复小数?

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

示例:我有分数:1/3,并且它是重复的小数-0.33333333333333333333333我有分数1/2,并且它是终止的小数-0.5

我不知道我该怎么做。

Kev*_*vin 5

根据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
Run Code Online (Sandbox Code Playgroud)

如果您的分数在IEEE浮点数中,则只要它不是NaN或+/-无穷大,它就总是终止。浮点数有限表示为c * b^q。可以将这些术语重新排列为c / (b^-q)。b始终为2或10,因此数字适合k/(2^n * 5^m)格式,因此为终止分数。