Python 十进制 ROUND_UP InvalidOperation
Python decimal ROUND_UP InvalidOperation
为什么要转换为带 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
问题是 x
是一个浮点数,因此您一分配给 x 就失去了精度。如果您想解决这个问题,可以将 x
设为字符串 "369.69"
。从字符串构建的 Decimal
将具有精确的精度。
创建 Decimal
对象时,prec
将被忽略。来自 the documentation:
The significance of a new Decimal is determined solely by the number of digits input. Context precision and rounding only come into play during arithmetic operations.
您在 quantize
中遇到的错误是因为结果中的位数大于设置的精度。 prec
设置 总 位数,而不是小数点后的位数。
>>> y = decimal.Decimal(69.69)
>>> y
Decimal('69.68999999999999772626324556767940521240234375')
>>> y.quantize(decimal.Decimal('1'), rounding=decimal.ROUND_UP)
Decimal('70')
为什么要转换为带 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
问题是 x
是一个浮点数,因此您一分配给 x 就失去了精度。如果您想解决这个问题,可以将 x
设为字符串 "369.69"
。从字符串构建的 Decimal
将具有精确的精度。
创建 Decimal
对象时,prec
将被忽略。来自 the documentation:
The significance of a new Decimal is determined solely by the number of digits input. Context precision and rounding only come into play during arithmetic operations.
您在 quantize
中遇到的错误是因为结果中的位数大于设置的精度。 prec
设置 总 位数,而不是小数点后的位数。
>>> y = decimal.Decimal(69.69)
>>> y
Decimal('69.68999999999999772626324556767940521240234375')
>>> y.quantize(decimal.Decimal('1'), rounding=decimal.ROUND_UP)
Decimal('70')