我需要编写一个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')

但这在许多情况下不起作用。例如,Python将比较Fraction(347, 1000) == 0.347误认为是错误代码,尽管它应该是False,但它返回True
我知道python有一个与浮点运算有关的问题,因此我正在寻找解决此问题的解决方法或软件包。

注意:我使用了sympy,但是在sympy中,S(1)/3 == 1/3的比较返回True,在这里我需要将它设为False

最佳答案

使用这个:



您可以通过将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

关于python - 确定python分数是否可以具有等效的小数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41997889/

10-11 14:57