Mus*_*aab 15 python currency decimal python-3.x
如何使用decimal模块将小数值保留在2个位置以代表金钱?
我已经设定了精度,并且该死的一切都在附近,并且遇到了失败.
pat*_*rys 34
使用钱时,您通常希望尽可能晚地限制精度,因此乘法之类的事情不会聚合舍入误差.在Python 2和3,你可以.quantize()一个Decimal任意精度你想要的:
unit_price = decimal.Decimal('8.0107')
quantity = decimal.Decimal('0.056')
price = unit_price * quantity
cents = decimal.Decimal('.01')
money = price.quantize(cents, decimal.ROUND_HALF_UP)
Run Code Online (Sandbox Code Playgroud)
kei*_*thb 11
除了用于舍入操作的常量之外,接受的答案大多是正确的.您应该使用ROUND_HALF_UP而不是ROUND_05UP货币操作.根据文件:
小数.ROUND_HALF_UP
绕到最近的领带远离零.
小数.ROUND_05UP
如果在向零舍入后的最后一个数字将为0或5,则从零开始舍入; 否则向零舍入.
ROUND_05UP如果百分位数中的数字是5或0,那么使用只会向上舍入(对于正数),这对于货币数学来说是不正确的.
这里有些例子:
>>> from decimal import Decimal, ROUND_05UP, ROUND_HALF_UP
>>> cents = Decimal('0.01')
>>> Decimal('1.995').quantize(cents, ROUND_HALF_UP)
Decimal('2.00') # Correct
>>> Decimal('1.995').quantize(cents, ROUND_05UP)
Decimal('1.99') # Incorrect
>>> Decimal('1.001').quantize(cents, ROUND_HALF_UP)
Decimal('1.00') # Correct
>>> Decimal('1.001').quantize(cents, ROUND_05UP)
Decimal('1.01') # Incorrect
Run Code Online (Sandbox Code Playgroud)
Falsehoods programmers believe about money:
| 归档时间: |
|
| 查看次数: |
12889 次 |
| 最近记录: |