11
>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???

ここで何が起こっているのですか?0.47000000000000003文字列に変換し、結果の値を float に戻すにはどうすればよいですか?

WindowsでPython 2.5.4を使用しています。

4

4 に答える 4

16

str(0.47000000000000003)くれぐれも'0.47'可能float('0.47')です0.46999999999999997。これは、浮動小数点数の表現方法によるものです (このウィキペディアの記事を参照してください) 。

注: float(repr(0.47000000000000003))oreval(repr(0.47000000000000003))で期待どおりの結果が得られますが、精度が必要な場合はDecimalを使用する必要があります。

于 2009-11-22T10:35:48.150 に答える
3

float (および double) の精度は無限ではありません。当然、それらを操作すると丸め誤差が発生します。

于 2009-11-22T10:34:45.790 に答える
2

これはPython のよくある質問です

同じ質問がcomp.lang.pythonでもかなり定期的に出てきます。

これが FAQ である理由は、Python が他のすべての点で完璧であるためです ;-)、学校で教えられたのと同じように、算術演算を完全に実行することを期待しているからです。ただし、数値法のコースを受講した人なら誰でも言うように、浮動小数点数は完璧にはほど遠いものです。

Decimalは優れた代替手段です。より高速でより多くのオプションが必要な場合は、gmpyも最適です。

于 2009-11-22T11:41:21.173 に答える
0

この例では、これはPythonで分割するとエラーになると思います

    >>> print(int(((48/5.0)-9)*5))
    2

簡単な方法で、私はこれでこの問題を解決します

    >>> print(int(round(((48/5.0)-9)*5,2)))
    3
于 2015-04-30T09:10:02.250 に答える