@MasterCopipaster

Есть ли в Python библиотека для «бугалтерских» расчетов?

Все мы знаем о проблемах вычисления дробных чисел, особенно если речь идет про деньги, и например нам нужна точность два знака после точки, если в Python сделать что то вроде этого
number = 0.1 + 0.1 + 0.1
print(number)       # 0.30000000000000004

Мы получим не правильное число т.к должно быть 0.30
Однако есть библиотека которая должна решить данную проблему называется она decimal

from decimal import Decimal
 
number = Decimal("0.444")
number = number.quantize(Decimal("1.00"))
print(number)       # 0.44
number = Decimal("0.555678")
print(number.quantize(Decimal("1.00")))       # 0.56
number = Decimal("0.999")
print(number.quantize(Decimal("1.00")))       # 1.00


Беда в том что она не решает "бугалтерскую" проблему.
И занимается округлением числе с нужной точностью.
В чем суть, если вы считаете деньги при конвертации банковской транзакции, из одной валюты в другую то:
при расчетах "0.555678" превращается в 0.55 а не в 0.56, то есть дробная часть после какова то знака просто отбрасывается. 0.999 становится 0.99 ¢ а не 1$. Думаю суть понятна.
Вопрос собственно в том есть ли уже готовые библиотеки на подобие decimal которые решают данную проблему?
Я лично в гугле сколько не искал всегда натыкаюсь исключительно на decimal.
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
@kisaa
>>> import decimal
# By default rounding setting in python is decimal.ROUND_HALF_EVEN
>>> decimal.getcontext().rounding = decimal.ROUND_DOWN
>>> c = decimal.Decimal(34.1499123)
# By default it should return 34.15 due to '99' after '34.14'
>>> round(c,2)
Decimal('34.14')
>>> float(round(c,2))
34.14
>>> print(round(c,2))
34.14

https://stackoverflow.com/questions/8595973/trunca...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы