如何让Python fractions模块的Fraction函数返回约分后的分数?
解决Fraction返回未约分分数的问题
嘿,这个问题我之前也踩过坑!其实根源是浮点数的精度限制在搞鬼,咱们来一步步捋明白:
为什么会出现那个奇怪的大分数?
你写的1 + 1/(2 + 1/2)会先被Python当成浮点数计算:
1/2是0.5(这个是精确的),2 + 0.5 = 2.5(也精确)- 但
1/2.5 = 0.4就麻烦了——0.4在二进制浮点数里是无限循环的近似值,实际存储的是一个接近0.4但不完全等于它的数 - 最后
1 + 这个近似值得到的也是一个接近1.4的浮点数,而非精确的7/5
当你把这个不精确的浮点数传给Fraction时,它会基于这个二进制近似值创建分数,自然就得到了那个看起来没法约分的大分数。
正确的做法:全程用Fraction做精确运算
要避开浮点数的干扰,直接用Fraction对象构建整个表达式,让所有运算都在有理数范围内精确进行:
from fractions import Fraction # 用Fraction对象逐步构建表达式 result = Fraction(1) + Fraction(1, Fraction(2) + Fraction(1, 2)) print(result) # 输出:7/5
或者更简洁的写法:
from fractions import Fraction result = Fraction(1) + 1 / (Fraction(2) + 1/Fraction(2)) print(result) # 同样输出7/5
这样所有运算都是精确的分数运算,最终结果自然就是约分后的7/5啦!
内容的提问来源于stack exchange,提问作者asgarth
相关产品推荐
相关产品推荐

