【发布时间】:2010-09-30 20:39:35
【问题描述】:
举个例子:
>>> 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 美分,但从技术上讲还是不正确。
我该如何克服这样的问题?我是否将其视为生活中的事实而忽略,还是有一种可接受的方式来做这种事情(例如,总是向客户收取最近的一分钱)?
【问题讨论】:
-
观看超人 III 或办公空间,了解您应该在这里做什么......
-
这其实根本不是一个编程问题,因为编程可以提供没有通用的解决方案。您需要向会计师提出这个问题。
-
@San - 办公空间 - 我打算参考一下 :) 不过我不记得是在《超人 3》中。
-
另一方面,“价格降低 1/3”通常并不意味着“将价格除以 3”。在这种情况下,通过您的四舍五入,折扣 将向上四舍五入为 0.2,得到的价格将是 0.39,客户应该可以接受。
-
你不是真的在降价 2/3 吗?你将从 60 美分变为 20 美分。如果你这样做,数学会更清晰,更不容易出错:discounted = nrml_price * (1 - discnt_pctg)
标签: python concurrency currency