почему деление чисел с плавающей точкой с помощью Decimal не всегда корректно
Например, если я считаю 0.123866/10000
import decimal
decimal.getcontext().prec = 20
a = decimal.Decimal('0.123866')
b = decimal.Decimal("10000")
print(a / b)
Данный код выдаст 0.0000123866
Но если я буду делить 0.000866/10000 , то ответ будет 8.66E-8
Почему так происходит, и что делать? (Версия Python 3.12)
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
Почему так происходит, и что делать?
Когда результат деления становится очень маленьким, библиотека начинает использовать научную нотацию, чтобы компактно представить число. Такой же эффект можно получить, если число будет очень большим.
from decimal import Decimal, getcontext
getcontext().prec = 10
a = Decimal('86667679679567956')
b = Decimal("10000567965756")
print(format((a * b), 'f')) # 866726021100000000000000000000
print(a * b) # 8.667260211E+29
Фактически 8.66E-8 == 0.0000000866 , а следовательно вычисления произведены корректно.
Поправить вывод можно так:
f"{a / b:.10f}" или format((a / b), 'f')