Как производить корректное умножение/деление чисел в формате float?
Как избавиться от такого?
i = 305.9
n = i * 100
print(n)
30589.999999999996
Есть более глобальный способ, или нужно округлять round'ом после каждого действия?
Ответы (1 шт):
Округлять при выводе до приемлемого количества знаков после запятой:
i = 305.9 n = i * 100 print(f"{n:.2f}") # 30590.00Округлять постоянно при каждом действии не нужно.
Использовать класс
Decimalfrom decimal import Decimal i = Decimal("305.9") n = i * 100 print(n) # 30590.0Опять же, не нужно все оборачивать в
Decimal- а только там, где у вас появляется дробное число. Например, при вводе числа пользователем.Но стоит учитывать, что
Decimalработает медленнее, чемfloat. Модульdecimalсейчас написан на Си, так что разница в производительности для CPython будет не в сотни раз, а максимум раз в 10 (рандомный бенчмарк на моем компютере на CPython 3.8 показал разницу ~в два раза), но если производительность критична, лучшеDecimalне использовать.