推荐使用 fractions.Fraction 类进行精确分数计算:支持整数/字符串初始化(避免浮点数)、四则运算自动约简、混合类型运算及分子分母提取,如 Fraction(1,2)+Fraction(2,3)-Fraction(1,6) 得 Fraction(4,3)。
Python 中进行分数计算,推荐使用标准库中的 f 类。它能精确表示和运算分数(有理数),避免浮点数误差,适合数学计算、教学演示或需要精确结果的场景。
ractions.Fraction
可以通过整数、字符串或浮点数(不推荐用浮点数初始化,易引入精度问题)构造 Fraction:
Fraction(3, 4) → 表示 3/4Fraction('5/6') → 从字符串解析,安全且推荐Fraction(0.75) → 虽可运行,但 0.75 是浮点近似值,可能意外变成 Fraction(3/4) 或更复杂形式;建议优先用字符串或整数对Fraction(2) → 等价于 Fraction(2, 1),即整数自动转为分母为 1 的分数支持 +、−、×、÷ 运算符,结果仍为最简分数:
Fraction(1, 2) + Fraction(1, 3) → Fraction(5, 6)
Fraction(3, 4) * Fraction(2, 5) → Fraction(3, 10)
Fraction(7, 8) / Fraction(1, 4) → Fraction(7, 2)
Fraction(1, 2) + 1 → Fraction(3, 2)(整数自动转为分数)方便提取数值成分或转为其他类型:
立即学习“Python免费学习笔记(深入)”;
f = Fraction(17, 4) → f.numerator 是 17,f.denominator 是 4float(f) → 转为浮点数(仅用于显示或兼容,会丢失精度)str(f) → 返回字符串形式,如 '17/4';若为带分数,需自行格式化(如 f // 1 取整数部分,f % 1 取真分数部分)f.limit_denominator(max_denominator=100) → 将近似浮点数转为“最接近的、分母不超过指定值”的分数(常用于将小数还原为常用分数)计算:1/2 + 2/3 − 1/6
from fractions import Fraction result = Fraction(1, 2) + Fraction(2, 3) - Fraction(1, 6) print(result) # 输出:Fraction(4, 3) print(float(result)) # 可选:1.333...
结果自动约分为最简形式 4/3,全程无精度损失。