Python - какая методика расчета денег принята? - PullRequest
1 голос
/ 01 октября 2010

Возьмите следующий пример:

>>> from decimal import Decimal
>>> nrml_price = Decimal('0.59')
>>> discounted = nrml_price / 3  # Taking 2/3 off the price with a coupon
Decimal('0.1966666666666666666666666667')  # Customers don't have fractions of a penny
>>> (nrml_price / 3).quantize(D('0.00'))  # So I quantize to get 2 decimal places
Decimal('0.20')  # Ca fait combien? Cest vingt cents.

Проблема в том, что я теперь технически взимал с клиента плату, превышающую ожидаемую цену, хотя и менее чем на 3/10 процента, но тем не менее этотехнически неверно.

Как мне преодолеть такую ​​проблему?Игнорирую ли я это как жизненный факт, или есть ли приемлемый способ сделать что-то подобное (например, всегда списывать с покупателя ближайшую копейку)?

Ответы [ 2 ]

7 голосов
/ 01 октября 2010

"Есть ли приемлемый способ сделать подобные вещи"

Да. Бухгалтеры делают это постоянно.

Действительно, COBOL делает это очень хорошо.

В пакете Python decimal есть несколько параметров округления, которые вы устанавливаете в контексте. Почти всегда параметры decimal.ROUND_HALF_DOWN или decimal.ROUND_HALF_EVEN - это то, что вам нужно в вашем контексте.

При создании подобного программного обеспечения для управления розничной торговлей будут действовать корпоративные политики, управляемые реальными бухгалтерами, которые определяют, что следует делать.

Спросите бухгалтера, который работает с этим видом деятельности, какова политика.

4 голосов
/ 01 октября 2010

Ответ здесь может зависеть больше от вашего процессора транзакций. Позволяет ли ваш процессор транзакций переводить суммы в валюте, которые не являются целыми числами центов? Как насчет нерациональной стоимости валюты? Скажите, что скидка была квадратным корнем от нормальной цены?

Большинство продавцов (это вы здесь) просто округляют и сохраняют разницу в целых центах.

...