Python - 接受的货币计算技术是什么?

时间:2010-09-30 20:39:35

标签: python concurrency currency

采用以下示例:

>>> 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 个答案:

答案 0 :(得分:7)

“有一种可接受的方式来做这种事情”

是。会计师一直这样做。

事实上,COBOL做得非常好。

Python decimal包中有一堆在上下文中设置的舍入选项。几乎总是在您的上下文中使用decimal.ROUND_HALF_DOWN或decimal.ROUND_HALF_EVEN选项。

在为这样的零售管理构建软件时,将制定公司政策,由真实会计师管理,并指明应该做什么。

询问与该业务部门合作的会计师,该政策是什么。

答案 1 :(得分:4)

这里的答案实际上可能更多地取决于您的交易处理器。您的交易处理器是否允许您转移不是整数美分的货币数量?非理性价值货币金额怎么样?假设折扣是正常价格的平方根?

大多数供应商(你们在这里)将简单地整理并保持差异,以整分钱计算。