← Все вопросы

Почему 0.1 + 0.2 не равно 0.3?

Задан 5 месяцев назад997 просмотров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.

Ваш ответ

Войдите, чтобы ответить на вопрос.