← Все вопросы

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

Задан 4 месяца назад909 просмотров2 ответа
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. Не баг, а особенность представления чисел.

Ваш ответ

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