程式中算錢不能用浮點型別是個什麼坑?
閱讀本文大概需要 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql浮點型別是什麼MySql型別
- 為什麼php的浮點數運算不準確PHP
- 浮點運算為什麼不準?有人為0.30000000000000004建了個網站網站
- golang中time型別的這個是什麼意思?Golang型別
- 為什麼計算機對浮點型數字計算存在誤差計算機
- Java中浮點數的坑Java
- 什麼是MIME型別型別
- arange浮點型別資料型別
- Java中Short型別轉換為Int型別是如何計算的?原碼、反碼、補碼是什麼?Java型別
- 錢是什麼?怎麼賺錢?
- javascript值型別是什麼JavaScript型別
- python中怎麼建立浮點型變數?Python變數
- java浮點型別案例介紹Java型別
- 什麼是浮動IP
- 計算機中的浮點運算計算機
- 有關 PHP 和 js 浮點運算的坑PHPJS
- 工作流應用程式型別的區別是什麼?型別
- 什麼是寫程式碼及基本資料型別資料型別
- css中的閉合浮動是什麼意思CSS
- Python基本資料型別之浮點型Python資料型別
- 【雲端計算小知識】什麼是雲端計算?雲端計算特點是什麼?
- 資料結構中抽象資料型別是什麼?資料結構抽象資料型別
- 什麼是去中心化錢包?去中心化錢包是什麼意思?中心化
- 什麼是Python型別轉換?主要包含什麼?Python型別
- 什麼是NumPy?Python中NumPy資料型別有哪些?Python資料型別
- js中浮點數計算常用方法JS
- Hibernate查詢後返回的集合物件中每個物件是什麼型別的?物件型別
- imtoken錢包是什麼?imtoken錢包教程
- 通俗理解鴨子型別是幹什麼的型別
- C語言中寫一個程式將浮點型轉化成字元型輸出C語言字元
- 面試官瘋了嗎,問我為什麼浮點數不精確?面試
- 誰知道資料庫中的 longbinary型別對應的Java型別是什麼?資料庫型別Java
- 什麼是 unicode 程式碼點Unicode
- 面試官:說說什麼是泛型的型別擦除?面試泛型型別
- 一個浮點數計算的問題
- CSS浮動元素特點有什麼CSS
- 【雲端計算】什麼是私有云?可提供哪些服務?缺點是什麼?
- 資料型別是什麼?Python的資料型別又有哪些?資料型別Python