看着Decimal我试着把pi转换成各种精度。我可以用下面的前两个选项调用pi.quantize(),但是它用第三个选项引发了InvalidOperationpi的精度远不及……

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的参数中。

最佳答案

每AA>
…如果量化操作后的系数长度
大于精度,则发出InvalidOperation信号。
因此,必须将精度设置为3;若要检查此项,请尝试:

from decimal import Decimal, getcontext

print(getcontext().prec)

你应该阅读有关the documentation的文档,了解它们的用途以及如何使用它们。例如,您可以尝试:
from decimal import Context, Decimal, getcontext

...

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

08-19 21:11