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