首页 > 解决方案 > 分数函数返回未减少的分数

问题描述

我正在尝试将数学表达式转换为缩减分数。当使用分数模块中的分数函数时,我得到一个未减少的分数。

编码

from fractions import Fraction

print(Fraction(1 + 1/(2 + 1/2)))

返回3152519739159347/2251799813685248减少到7/5

我希望我的代码返回减少的分数。

标签: pythonpython-3.xfractions

解决方案


这是由于浮点数学的不精确性。

虽然确实1 + 1/(2 + 1/2)应该减少到7/5(或1.4),但小数1.4不能用浮点数精确表示

>>> '{:030f}'.format(1.4)
1.39999999999999999999911182158029987

这种不准确性导致它产生的分数不同于7/5

如果您想要精确的分数数学,您需要使用分数来完成整个方程式,而不是将其与浮点数混合。


推荐阅读