Я пишу код, который будет касаться валют, сборов и т.д. Я собираюсь использовать класс BigDecimal для математики и хранения, но мы столкнулись с чем-то странным с ним.
Это утверждение:
1876.8 == BigDecimal('1876.8')
возвращает false.
Если я запустил эти значения через строку форматирования "%.13f"
, я получаю:
"%.20f" % 1876.8 => 1876.8000000000000
"%.20f" % BigDecimal('1876.8') => 1876.8000000000002
Обратите внимание на дополнительный 2
из BigDecimal в последней десятичной запятой.
Я думал, что BigDecimal должен был противостоять неточностям хранения реальных чисел непосредственно в собственной плавающей точке компьютера. Где находится этот 2
?