Decimal.quantize引发InvalidOperation

时间:2015-08-03 19:19:13

标签: python python-3.4

查看Decimal我试图将pi转换为各种精确度。我可以使用下面的前两个选项调用pi.quantize(),但是使用第三个选项会引发InvalidOperationpi的精确度远远不及...... {/ p>

from decimal import Decimal

pi  = Decimal('3.1415926535897932384626433832795028841971693993751058209749445'
              '923078164062862089986280348253421170679')
print(pi) # prints same as the string above

# just print formatted
print('{:1.7f}'.format(pi))

print(pi.quantize(Decimal('1.0')))     # 3.1
print(pi.quantize(Decimal('1.00')))    # 3.14
print(pi.quantize(Decimal('1.000')))   # raises InvalidOperation

这里发生了什么?我误解了这个功能应该做什么?为什么这个例外发生在1.000而不是之前/之后?

'0.001'作为quantize的参数发生同样的异常。

1 个答案:

答案 0 :(得分:8)

the documentation

  

...如果量化操作后系数的长度是   大于精度,然后发出InvalidOperation信号。

因此,您的精确度必须设置为3;检查一下,试试:

from decimal import Decimal, getcontext

print(getcontext().prec)

您应该阅读contexts上的文档,了解它们的用途以及如何使用它们。例如,您可以尝试:

from decimal import Context, Decimal, getcontext

...

print(pi.quantize(Decimal('1.000'), Context(prec=4)))