Глава 4 · Python любит числа

Fraction — точные обычные дроби

Когда нужна не десятичная, а самая обычная точная дробь — числитель через знаменатель, без приближения.

Ещё один точный числовой инструмент из стандартной библиотеки — Fraction, обычная рациональная дробь «числитель / знаменатель», без какого-либо приближения.

fraction_demo.py
from fractions import Fraction

third = Fraction(1, 3)
print(third)  # 1/3
1/3
Fraction(1, 3) — ровно одна треть, без приближения

Арифметика с Fraction — точная

fraction_math.py
from fractions import Fraction

result = Fraction(1, 3) + Fraction(1, 6)
print(result)  # 1/2 — точно, не приближённо

Fraction из текста и из float — тоже разница

fraction_stroka.py
from fractions import Fraction

print(Fraction("0.1"))  # 1/10 — прочитано из десятичного текста точно
print(Fraction(0.1))    # 3602879701896397/36028797018963968 — унаследовал приближение float!

Та же самая логика, что и с Decimal в разделе 4.14: если сначала создать float, приближение уже произошло раньше, чем Fraction успел его получить.

float, Decimal и Fraction рядом

ИнструментПредставляетТочен дляТипичное применение
floatДвоичное приближениеСтепеней двойки и их суммНаука, измерения, общие расчёты
DecimalДесятичную дробьДесятичных значенийДеньги, бухгалтерия
FractionРациональное число p/qЛюбой обычной дробиТочная рациональная арифметика
float vs Decimal vs Fraction
Нужен обычный расчёт или измерение?
float
Нужна десятичная точность (деньги)?
Decimal
Нужна точная дробь p/q?
Fraction
Три инструмента для трёх разных видов точности
Практика: Fraction и точные дроби
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →