← Все вопросы
Почему 0.1 + 0.2 не равно 0.3?
23
print(0.1 + 0.2) # 0.30000000000000004
print(0.1 + 0.2 == 0.3) # False
Это что, Python считать не умеет?? Как тогда сравнивать дробные?
2 ответа
28
Умеет 🙂 Проблема не в Python, а в формате float (двоичная плавающая точка): 0.1 и 0.2 не представимы точно в двоичной, как 1/3 в десятичной. Копится крошечная погрешность.
Поэтому дробные не сравнивают через ==:
import math
math.isclose(0.1 + 0.2, 0.3) # True
Нужна точность (деньги) — модуль decimal.
Александр Мальчевский math.isclose — то что нужно, спасибо · 4 месяца назад
Вадим Бобарев значит это во всех языках так? · 4 месяца назад
13
Это во всех языках с float (C, Java, JS) — стандарт IEEE 754. Не баг, а особенность представления чисел.
Ваш ответ
Войдите, чтобы ответить на вопрос.