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