Python decimal.InvalidOperation错误

时间:2015-11-20 12:50:37

标签: python python-3.x math

我在运行这样的事情时总是会收到此错误:

from decimal import *
getcontext().prec =30

b=("2/3")

Decimal(b)

错误:

Traceback (most recent call last):
  File "Test.py", line 6, in <module>
    Decimal(b)
decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>]

另外,为什么我从控制台得到这个结果?

>>> Decimal(2/3)
Decimal('0.66666666666666662965923251249478198587894439697265625')

由于

2 个答案:

答案 0 :(得分:10)

Decimal的初始化程序无法接受带有斜杠的字符串。非正式地,字符串必须看起来像一个数字。 This table显示字符串参数的正确格式。如果要计算2/3,请执行

>>> Decimal(2)/Decimal(3)
Decimal('0.6666666666666666666666666667')

Decimal(2/3)给出Decimal('0.66666666666666662965923251249478198587894439697265625')因为2/3计算浮点数,浮点数具有固有的有限精度。这是计算机使用浮点数代表2/3的最接近的地方。

答案 1 :(得分:0)

我解决了这样的问题

from decimal import *

b = (Decimal(2) / Decimal(3)).quantize(Decimal(1)/(10**Decimal(30)))

Decimal(b)

量化可使您获得必要的准确性