程式中算錢不能用浮點型別是個什麼坑?
先來考考大家,在下列 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型別
- 浮點運算為什麼不準?有人為0.30000000000000004建了個網站網站
- 為什麼計算機對浮點型數字計算存在誤差計算機
- Java中浮點數的坑Java
- arange浮點型別資料型別
- python中怎麼建立浮點型變數?Python變數
- Java中Short型別轉換為Int型別是如何計算的?原碼、反碼、補碼是什麼?Java型別
- 為什麼說js是弱型別語言,它的優缺點分別是什麼?JS型別
- Python基本資料型別之浮點型Python資料型別
- java浮點型別案例介紹Java型別
- javascript值型別是什麼JavaScript型別
- 工作流應用程式型別的區別是什麼?型別
- 什麼是寫程式碼及基本資料型別資料型別
- 錢是什麼?怎麼賺錢?
- 看下面程式碼,判斷a和b的型別是否為true?為什麼?什麼是基本包裝型別?[程式碼]型別
- 什麼是Python型別轉換?主要包含什麼?Python型別
- 資料結構中抽象資料型別是什麼?資料結構抽象資料型別
- 什麼是NumPy?Python中NumPy資料型別有哪些?Python資料型別
- C語言中寫一個程式將浮點型轉化成字元型輸出C語言字元
- js中浮點數計算常用方法JS
- 什麼是 unicode 程式碼點Unicode
- 什麼是浮動?浮動帶來的影響?怎麼清除浮動?
- 資料型別是什麼?Python的資料型別又有哪些?資料型別Python
- 【雲端計算小知識】什麼是雲端計算?雲端計算特點是什麼?
- 什麼是去中心化錢包?去中心化錢包是什麼意思?中心化
- Python程式設計基礎(一)程式語言是什麼?編譯型語言和解釋型語言的區別|Python是什麼?Python程式設計編譯
- python 判斷一個表示式是什麼布林型別bool()Python型別
- python中精確的浮點數運算Python
- CSS浮動元素特點有什麼CSS
- c中int型和浮點型的格式話輸出
- imtoken錢包是什麼?imtoken錢包教程
- 面試官瘋了嗎,問我為什麼浮點數不精確?面試
- 請你解釋下什麼是浮動和它的工作原理是什麼?同時浮動會引起什麼問題?
- 伺服器的頻寬接入有幾種型別,特點是什麼伺服器型別
- 為什麼range不是迭代器?range到底是什麼型別?型別
- 資料庫是什麼意思?有什麼用?有哪些型別?資料庫型別
- python中Roberts運算元是什麼Python
- 阿里巴巴為什麼建議使用BigDecimal進行浮點數運算阿里Decimal