为什么会将此转换为包含2位小数的数字?
x = 369.69
y=decimal.Decimal(x)
Decimal('369.68999999999999772626324556767940521240234375')
即使我已宣布
getcontext().prec = 2
那么,为什么我试图获得综合以获得370.00
:
y.quantize(decimal.Decimal('0.01'),rounding=decimal.ROUND_UP)
最终出现此错误:
InvalidOperation: quantize result has too many digits for current context quantize result has too many digits for current context
答案 0 :(得分:3)
问题是x
是一个浮点数,因此只要您分配给x,就会丢失精度。如果您想解决此问题,可以将x
设为字符串"369.69"
。从字符串构建的Decimal
将具有精确的精度。
答案 1 :(得分:-1)
创建Decimal
对象时,将忽略prec
。来自the documentation:
新十进制的重要性仅由输入的位数决定。上下文精度和舍入仅在算术运算期间发挥作用。
您在quantize
中遇到的错误是因为结果中的位数大于设定的精度。 prec
设置总位数,而不是小数点后的位数。
>>> y = decimal.Decimal(69.69)
>>> y
Decimal('69.68999999999999772626324556767940521240234375')
>>> y.quantize(decimal.Decimal('1'), rounding=decimal.ROUND_UP)
Decimal('70')