這個話題可以起幾個標題,比如:為什麼 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 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***