2016-06-24 3 views
0

誰かが私がここで紛失していることを教えてもらえますか?これは、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? 
+0

参照:http://stackoverflow.com/questions/588004/is-floating-point-math-broken – Kusan

答えて

1

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 
+0

私が聞いたコメントは、地面の上に砂の小さな山のような浮動小数点数」、でした。あなたがそれを持ち上げて周りを移動するたびに、小さな砂を失い、少し汚れを拾います。また、* print *すると、内部、ベース* 2 *、浮動小数点値の文字、base- * ten *が表示されます。これらの特性はすべてのコンピュータ言語の典型であり、基本的に避けられないものです。 「それはちょうどその事がどのように機能するか...」(そして、「事実」によって、私は「コンピュータ」を意味する) –

関連する問題