Python做浮點數(float)運算要小心

王平發表於2018-12-27

氣球象徵浮點數

這個話題可以起幾個標題,比如:為什麼 8.5 – 8.4 不等於 0.1;怎麼來證明計算機是傻X

我們先來做個計算題:
7.3 – 7.2 = ?
5.1 – 3.4 = ?
8.5 – 8.4 = ?

上面的結果依次應該是: 0.1 1.7 0.1 對不對?

好,我們來看下Python計算出的結果是多少

浮點數相減結果

有點懵圈!結果跟我們的認知有偏差,輸出結果都比真實值小了那麼一丟丟。

浮點數精度問題

為什麼出現這種結果?

因為這是浮點型(float)資料,計算機對浮點數的表達本身是不精確的。

因為儲存在計算機中的是二進位制數,二進位制對有些數字不能準確表達,只能非常接近這個數。

所以我們在對浮點數做運算 和 比較大小的時候要小心,出現詭異問題,老闆到時候又要捶你肉了。

在計算機程式語言中浮點數問題是個普遍問題,不只是Python。

浮點數應該怎麼處理呢

把浮點數都同時精確到小數點某個位數來比較,比如同時精確到小數點後2位,後4位這樣。

在Pyton中你可以使用rand()這個函式來控制浮點數精確位數,rand()函式是返回某個值四捨五入後的值。

比如上面的例子,我們使用round函式都精確到小數點後2位來看。

用python round函式精確浮點數

結果終於符合我們的預期了。

浮點數的災難

浮點數在某些行業的運用很多,比如科學運算,比如銀行業,使用的時候就要慎重,

銀行裡小數點比較出錯,那可是白花花的銀子打了水漂。

愛國者導彈因為浮點數出錯

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章