看着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
这里发生了什么事?我是否误解了这个函数应该做什么?为什么此异常发生在
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)))