

新闻资讯
技术学院Python 中的“分数”指 fractions.Fraction 类型,用于精确表示有理数以避免浮点精度误差;它自动约分、支持四则运算、区别于 float 和 Decimal,适用数学推导等需精确计算场景。
Python 中的“分数”通常指 fractions.Fraction 类型,用来**精确表示有理数(即两个整数相除的结果)**,避免浮点数运算带来的精度误差。
浮点数(如 0.1 + 0.2)在计算机中无法精确存储,结果常为 0.30000000000000004;而 Fraction 始终以分子/分母形式保存,全程不引入小数近似。
Fraction(1, 3) 表示 1/3,Fraction('1/3') 或 Fraction(0.5)(自动转为最简分数 1/2)Fraction(6, 8) 会立即化为 Fraction(3, 4)
Fraction(1, 2) + Fraction(1, 3) 得到 Fraction(5, 6),结果仍精确Fracti
on ≠ float:前者是精确的整数比,后者是二进制近似值;
Fraction ≠ Decimal:Decimal 专为十进制小数设计(适合货币),Fraction 则面向任意有理数(包括 1/7 这类无限循环小数)。
Fraction(1, 7) 精确保存为 1/7;转成 float 就丢失精度;Decimal('1') / Decimal('7') 虽可设精度,但本质仍是截断近似Fraction(1, 2) == Fraction(5, 10) 返回 True)不是所有输入都能无损转为 Fraction。传入浮点数时,Python 实际转换的是该浮点数的**真实二进制值**,可能出人意料。
Fraction(0.1) 不等于 Fraction(1, 10),因为 0.1 在内存中本就是近似值(约等于 3602879701896397/36028797018963968)Fraction('0.1') 或 Fraction('1/10'),才能得到预期结果f = Fraction(3, 4); f.numerator → 3; f.denominator → 4
它不是 Python 的基础类型,需显式导入:from fractions import Fraction。用对了,就能避开很多“0.1 + 0.2 ≠ 0.3”的困惑。