You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:12:04