2

ここに私の入力があります:

>>> from decimal import Decimal
>>> Decimal('114.3')
Decimal('114.3')
>>> Decimal(114.3)
Decimal('114.2999999999999971578290569595992565155029296875')

Decimal のこれら 2 つのインスタンスは等しい必要があると思いましたが、float arg を使用した Decimal は精度を失っているようです。どうしてこれなの?私のpythonバージョンは2.7.3です。前もって感謝します!

4

2 に答える 2

3

を行うDecimal(114.3)と、通常の float オブジェクトを作成し、それを Decimal に渡します。float 114.3 が作成されたとき、Decimal がそれを確認する前に、バイナリ浮動小数点の不正確さが原因で精度が失われます。その精度を取り戻す方法はありません。そのため、Decimal は文字列表現を入力として受け入れるため、実際に入力した内容を確認し、適切なレベルの精度を使用できます。

于 2013-10-05T21:29:31.693 に答える
2

2 行目は、114.3 に近い 2 進浮動小数点数の正確な 10 進数値を示しています。これはほぼすべてバイナリ浮動小数点に関するものであり、Decimal に関するものではありません。詳細については、ドキュメントを参照してください。

後で: Python 3 を使用している場合は、代わりにこれらのドキュメントを参照してください。基本的なことは同じですが、Python 3 には、「このような」ケースを探索するのに役立つツールが他にもあります。

于 2013-10-05T21:30:19.287 に答える