python小數點后兩位數的減法為什么會出現循環小數?
首先要說明的是這個現象不僅僅發生在減法, 凡是涉及到浮點型(float)的基本數學計算都有可能出現你認為是錯誤的行為。比如下面這個加法;
再說原因, 這個主要是由于浮點型數據在計算機內部是以二進制形式表示的。而小數由二進制表示往往由于精度的原因導致和實際表示的值不一致;比如上面的"2.1"在python解釋執行時已經被表示成內部的二進制形式,有可能發生精度的偏移。這樣計算之后的結果自然與期望的不一致了。
那么如何要避免這個問題呢?特別是與MONEY/$$$$$$$相關的計算的時候:
a. 用decimal 這個數據類型進行計算:
b.如果只是想顯示出期望的值,可以用rounding:
>> t = 0.2+0.1
>> print("%0.1f" % t)
===> 0.3
c.可以利用Int類型計算:
>> (0.2 * 10 + 2.1 * 10)/10
上一篇我讓她多喝熱水