我在运行这样的事情时总是会收到此错误:
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')
由于
答案 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)
量化可使您获得必要的准确性