程式中算錢不能用浮點型別是個什麼坑?

孤獨鍵客發表於2019-04-26
閱讀本文大概需要 1 分鐘。

先來考考大家,在下列 Java 程式碼中,你覺得在控制檯會列印什麼值呢?

程式中算錢不能用浮點型別是個什麼坑?

貌似難不倒大家,這不是 so easy ,連小學生都會算的題目,1.0 - 0.9 = 0.1 啊,但是你覺得會等於 0.1 嗎?

看下上圖程式碼的輸出結果:

程式中算錢不能用浮點型別是個什麼坑?

有沒有驚訝,有沒有很刺激,0.0……02 難道被計算機吃掉了???

好吧,當初我也是這幅表情(原諒我基礎薄弱)。

那如果我們將其換成 float 型別的會怎麼樣呢?再來試試。

程式中算錢不能用浮點型別是個什麼坑?

控制檯列印結果:

程式中算錢不能用浮點型別是個什麼坑?

結果居然多了 0.10…24,那不得樂開花啊~

那麼以上這些現象是為什麼呢?

浮點數在計算機中採用二進位制表示,而二進位制系統無法精確表示某些小數,比如 1/10 ,就像十進位制無法表示 1/3 一樣,這樣是產生誤差的原因。

在企業開發中,當涉及到錢的計算時應該使用 BigDecimal 型別來處理,尤其是在金融領域,只要和錢有關的任何邏輯,都是大事,反之沒那麼嚴重(只是沒那麼大)。


·END·

程式設計師的成長之路

路雖遠,行則必至

本文原發於 同名微信公眾號「程式設計師的成長之路」,回覆「1024」你懂得,給個讚唄。


往期精彩回顧


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69902700/viewspace-2642591/,如需轉載,請註明出處,否則將追究法律責任。

相關文章