采用以下示例:
>>> 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分,但技术上不正确。
我如何克服这样的问题?我是否将其视为生活中的一个事实,或者是否有可接受的方式来做这类事情(例如,总是向客户收取最近的一分钱)?
答案 0 :(得分:7)
“有一种可接受的方式来做这种事情”
是。会计师一直这样做。
事实上,COBOL做得非常好。
Python decimal
包中有一堆在上下文中设置的舍入选项。几乎总是在您的上下文中使用decimal.ROUND_HALF_DOWN或decimal.ROUND_HALF_EVEN选项。
在为这样的零售管理构建软件时,将制定公司政策,由真实会计师管理,并指明应该做什么。
询问与该业务部门合作的会计师,该政策是什么。
答案 1 :(得分:4)
这里的答案实际上可能更多地取决于您的交易处理器。您的交易处理器是否允许您转移不是整数美分的货币数量?非理性价值货币金额怎么样?假设折扣是正常价格的平方根?
大多数供应商(你们在这里)将简单地整理并保持差异,以整分钱计算。