web-dev-qa-db-ja.com

Python decimal.InvalidOperation error

次のようなものを実行すると、常にこのエラーが発生します。

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

ありがとう

10
Matteo

Decimalの初期化子は、スラッシュを含む文字列を受け入れることができません。非公式には、文字列は単一の数字のように見える必要があります。 この表 は、文字列引数の適切な形式を示しています。 2/3を計算したい場合は、

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

Decimal(2/3)Decimal('0.66666666666666662965923251249478198587894439697265625')を返します。これは、2/3は浮動小数点数に評価され、浮動小数点数は本質的に精度に制限があるためです。これは、floatを使用してコンピューターが_2/3_を表すのに最も近い距離です。

15
Kevin

このように問題を解決しました

from decimal import *

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

Decimal(b)

量子化により、必要な精度を得ることができます

0
user11614811