1. 程式人生 > >淺談Java BigDecimal

淺談Java BigDecimal

float和double型別的主要設計目標是為了科學計算和工程計算。他們執行二進位制浮點運算,這是為了在廣域數值範圍上提供較為精確的快速近似計算而精心設計的。然而,它們沒有提供完全精確的結果,所以不應該被用於要求精確結果的場合。但是,商業計算往往要求結果精確,這時候BigDecimal就派上大用場啦。
look 下面的例子:

		System.out.println(0.11+0.21);
		System.out.println(0.2+0.1);

猜猜等於啥?你以為???
控制檯輸出:
在這裡插入圖片描述
問題在哪裡呢?原因在於我們的計算機是二進位制的。浮點數沒有辦法是用二進位制進行精確表示。我們的CPU表示浮點數由兩個部分組成:指數和尾數,這樣的表示方法一般都會失去一定的精確度,有些浮點數運算也會產生一定的誤差。
正確的寫法是這樣:
在這裡插入圖片描述

在真正的業務中,通常很多金額欄位型別都為BigDecimal型別,像我所從事的醫保行業,每天有很多基金支出,更馬虎不得,例如:

private String money;
get和set方法省略。。。。
//假如金額需要累加
this.getMoney.add(new BigDecimal("0.005"));
//這樣有沒有問題????
//控制檯會毫不留情的丟擲空指標異常滴,當把this.getMoney()列印一下,發現是個null,null當然不能
//add,所以正確的做法是,在累加之前,給其賦予初始值,即:
this.setMoney('0.00');



每天記錄一點,心理暢快一點。