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