次のようなものを実行すると、常にこのエラーが発生します。
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')
ありがとう
Decimal
の初期化子は、スラッシュを含む文字列を受け入れることができません。非公式には、文字列は単一の数字のように見える必要があります。 この表 は、文字列引数の適切な形式を示しています。 2/3を計算したい場合は、
_>>> Decimal(2)/Decimal(3)
Decimal('0.6666666666666666666666666667')
_
Decimal(2/3)
はDecimal('0.66666666666666662965923251249478198587894439697265625')
を返します。これは、2/3は浮動小数点数に評価され、浮動小数点数は本質的に精度に制限があるためです。これは、floatを使用してコンピューターが_2/3
_を表すのに最も近い距離です。
このように問題を解決しました
from decimal import *
b = (Decimal(2) / Decimal(3)).quantize(Decimal(1)/(10**Decimal(30)))
Decimal(b)
量子化により、必要な精度を得ることができます