星期三哇-尝试使用小数学习“简单”算术
>>> a = Decimal('100.00')
>>> a
Decimal('100.00')
>>> b = Decimal('4.00')
>>> b
Decimal('4.00')
>>> a + b
Decimal('104.00')
>>> a * b
Decimal('400.0000')
如何将小数乘以2个小数位,以将/舍入/限制为2位? (4.00 * 100.00
=> 400.0000
[即小数点后4位而不是2位])
我正在尝试计算货币,税款,小计,订单项等……只是一些基本的会计算法。以下是一些输入和预期输出:
4.00 * 100.00 => 400.00
0.01 * 0.01 => 0.00
1.00 * 0.07 => 0.07
1.00 * 0.075 => 0.08 (im not sure I may have a use case for that, but Im sure it could be chained/curried to get that [ie `a = 7.50 / 100` then `100.00 * a` => `0.08`])
我不确定这是否称为精度误差,蠕变或什么……。
答案 0 :(得分:1)
您可以使用quantize()
来设置小数的小数位。
例如
>>> d = Decimal(123.456789)
>>> d.quantize(Decimal('0.01'))
Decimal('123.46')
例如,您可以这样做
c = (a*b).quantize(Decimal('0.01'))
# or
c = (a*b).quantize(a) # c will be in same exponent as a
# or, depending your preference in style
c = getcontext().quantize( a*b, Decimal('0.01'))