0

Как избавиться от такого?

i = 305.9
n = i * 100
print(n)
30589.999999999996

Есть более глобальный способ, или нужно округлять round'ом после каждого действия?

agassi
  • 43

1 Answers1

1
  1. Округлять при выводе до приемлемого количества знаков после запятой:

    i = 305.9
    n = i * 100
    print(f"{n:.2f}")  # 30590.00
    

    Округлять постоянно при каждом действии не нужно.

  2. Использовать класс 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 не использовать.

insolor
  • 49,104