>>> float(str(0.65000000000000002))
0.65000000000000002
>>> float(str(0.47000000000000003))
0.46999999999999997 ???
ここで何が起こっているのですか?0.47000000000000003
文字列に変換し、結果の値を float に戻すにはどうすればよいですか?
WindowsでPython 2.5.4を使用しています。
>>> float(str(0.65000000000000002))
0.65000000000000002
>>> float(str(0.47000000000000003))
0.46999999999999997 ???
ここで何が起こっているのですか?0.47000000000000003
文字列に変換し、結果の値を float に戻すにはどうすればよいですか?
WindowsでPython 2.5.4を使用しています。
str(0.47000000000000003)
くれぐれも'0.47'
可能float('0.47')
です0.46999999999999997
。これは、浮動小数点数の表現方法によるものです (このウィキペディアの記事を参照してください) 。
注: float(repr(0.47000000000000003))
oreval(repr(0.47000000000000003))
で期待どおりの結果が得られますが、精度が必要な場合はDecimalを使用する必要があります。
float (および double) の精度は無限ではありません。当然、それらを操作すると丸め誤差が発生します。
同じ質問がcomp.lang.pythonでもかなり定期的に出てきます。
これが FAQ である理由は、Python が他のすべての点で完璧であるためです ;-)、学校で教えられたのと同じように、算術演算を完全に実行することを期待しているからです。ただし、数値法のコースを受講した人なら誰でも言うように、浮動小数点数は完璧にはほど遠いものです。
この例では、これはPythonで分割するとエラーになると思います
>>> print(int(((48/5.0)-9)*5))
2
簡単な方法で、私はこれでこの問題を解決します
>>> print(int(round(((48/5.0)-9)*5,2)))
3