我需要编写一个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.
使用这个:
如果分母具有除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)