【问题标题】:Python decimal.InvalidOperation errorPython decimal.InvalidOperation 错误
【发布时间】:2015-11-20 12:50:37
【问题描述】:

我在运行这样的东西时总是遇到这个错误:

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')

谢谢

【问题讨论】:

    标签: python python-3.x math


    【解决方案1】:

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

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

    Decimal(2/3) 给出Decimal('0.66666666666666662965923251249478198587894439697265625'),因为 2/3 计算为浮点数,并且浮点数本身具有有限的精度。这是计算机可以使用浮点数表示2/3 的最接近的值。

    【讨论】:

    • 其他算术符号也是如此!
    • 或使用fractions.Fraction(2, 3)
    【解决方案2】:

    我这样解决了问题

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

    量化允许您获得必要的精度

    【讨论】:

      猜你喜欢
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      相关资源
      最近更新 更多