确定python分数是否可以具有等效的小数

Wes*_*raf 4 python math sympy

我需要编写一个python函数,它接受类"Fraction"类的对象作为参数,并确定该分数是否可以十进制格式表示.例如,1/2可以用0.5表示,但1/3没有带有限位数的十进制等值(0.333333333是近似值).

我的方法是将分数与分子除以分母的比较如下(假设"frac"是分数对象):

 if frac == frac.numerator / frac.denominator:
      print('has decimal representaion')
 else:
      print('has no decimal representation')
Run Code Online (Sandbox Code Playgroud)

但这在许多情况下都不起作用.例如,Python错误的比较Fraction(347, 1000) == 0.347,它返回False虽然它应该是True.我知道python有一个与浮点运算有关的问题,因此我正在寻找解决这个问题的变通方法或包.

注意:我使用了sympy但是在同意的情况下比较S(1)/3 == 1/3返回True,我需要它False.

Dan*_* D. 8

使用这个:

如果分母具有除2和5之外的任何素因子,则它没有精确的十进制表示. - 凯尔伍德

你可以通过将2s除以5s然后检查结果是否为1来测试这个:

def has_decimal_representaion(frac):
    d = frac.denominator
    for n in (2, 5):
        while d % n == 0:
            d = d / n
    return d == 1
Run Code Online (Sandbox Code Playgroud)