誰かが私がここで紛失していることを教えてもらえますか?これは、Python 2.7.11を使用している:PythonがFloatを正しく変換しない
print float(148.95)
print float(148.95)*100
print int(float(148.95)*100)
この印刷ん理由:
148.95
14895.0
14894 <--- Shouldn't this be 14895?
誰かが私がここで紛失していることを教えてもらえますか?これは、Python 2.7.11を使用している:PythonがFloatを正しく変換しない
print float(148.95)
print float(148.95)*100
print int(float(148.95)*100)
この印刷ん理由:
148.95
14895.0
14894 <--- Shouldn't this be 14895?
148.95が正確に浮動小数点を使用して表すことができる数ではありません。内部に格納されている番号は、実際には148.94999999999998863131622783839702606201171875
です。 100を掛けると、14894.999999999998181010596454143524169921875
が得られます。これを整数に変換すると、.999が切り捨てられ、14894が残されます。
小数点以下2桁の精度を正確に表すデータ型が必要な場合は、 Decimal
。
>>> from decimal import Decimal
>>> x = Decimal("148.95")
>>> print x
148.95
>>> print x*100
14895.00
>>> print int(x*100)
14895
私が聞いたコメントは、地面の上に砂の小さな山のような浮動小数点数」、でした。あなたがそれを持ち上げて周りを移動するたびに、小さな砂を失い、少し汚れを拾います。また、* print *すると、内部、ベース* 2 *、浮動小数点値の文字、base- * ten *が表示されます。これらの特性はすべてのコンピュータ言語の典型であり、基本的に避けられないものです。 「それはちょうどその事がどのように機能するか...」(そして、「事実」によって、私は「コンピュータ」を意味する) –
参照:http://stackoverflow.com/questions/588004/is-floating-point-math-broken – Kusan