Decimal.quantize引发InvalidOperation

hir*_*ist 5 python python-3.4

看着Decimal我试图转换pi成各种精度.我可以pi.quantize()使用下面的前两个选项进行调用,但它会InvalidOperation使用第三个选项进行调用.精确度pi远不及......

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
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我误解了这个功能应该做什么?为什么会发生此异常1.000而不是之前/之后?

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

jon*_*rpe 9

根据文件:

...如果量化操作之后系数的长度大于精度,则InvalidOperation发信号通知.

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

from decimal import Decimal, getcontext

print(getcontext().prec)
Run Code Online (Sandbox Code Playgroud)

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

from decimal import Context, Decimal, getcontext

...

print(pi.quantize(Decimal('1.000'), Context(prec=4))) 
Run Code Online (Sandbox Code Playgroud)