Python float - str - float の奇妙さ
-
21-09-2019 - |
質問
>>> float(str(0.65000000000000002))
0.65000000000000002
>>> float(str(0.47000000000000003))
0.46999999999999997 ???
ここで何が起こっているのでしょうか?変換するにはどうすればよいですか 0.47000000000000003
文字列に変換し、結果の値を浮動小数点数に戻すにはどうすればよいですか?
Windows で Python 2.5.4 を使用しています。
他のヒント
フロート(ダブル)は無限の精度を持っていません。あなたがそれらを操作する際に当然のことながら、丸めエラーが発生します。
これは Python よくある質問
同じ質問が出てきます comp.lang.python でかなり定期的に また。
これが FAQ である理由は、Python が他のすべての点で完璧であるため ;-)、学校で教えられたのと同じように、Python が算術を完璧に実行することを期待しているからだと思います。ただし、数値計算法のコースを受講した人なら誰でもわかるように、浮動小数点数は完璧からは程遠いです。
この例により、 私は、これはPythonでエラーがあると思いますが分裂するとき、
>>> print(int(((48/5.0)-9)*5))
2
簡単な方法、私はこのことで、この問題を解決する
>>> print(int(round(((48/5.0)-9)*5,2)))
3
所属していません StackOverflow