質問

>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???

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

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

役に立ちましたか?

解決

str(0.47000000000000003)ギブ'0.47'float('0.47') 0.46999999999999997することができます。 これは、浮動小数点数が表されている方法によるものである

(このウィキペディアの記事を参照します)

注:float(repr(0.47000000000000003))またはeval(repr(0.47000000000000003))はあなたに期待した結果が得られますが、あなたは進あなたは精度が必要な場合。

他のヒント

フロート(ダブル)は無限の精度を持っていません。あなたがそれらを操作する際に当然のことながら、丸めエラーが発生します。

これは Python よくある質問

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

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

10進数 より高速でより多くのオプションが必要な場合は、これは良い代替手段です。 グムピー も素晴らしいです。

この例により、 私は、これはPythonでエラーがあると思いますが分裂するとき、

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

簡単な方法、私はこのことで、この問題を解決する

    >>> print(int(round(((48/5.0)-9)*5,2)))
    3
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top