python 分数表示什么

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),结果仍精确

和浮点数、小数的区别

Fraction ≠ 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”的困惑。