Java在計算浮點數的時候,由於二進制無法精確表示0.1的值(就好比十進制無法精確表示1/3一樣),所以一般會對小數格式化處理.
但是如果涉及到金錢的項目,一點點誤差都不能有,必須使用精確運算的時候,就可以使用BigDecimal方法計算.
但是在使用中還需要注意一個問題:
//直接使用double類型數據進行運算 System.out.println(0.05+0.01); //使用BigDecimal的double參數的構造器 BigDecimal bd1 = new BigDecimal(0.05); BigDecimal bd2 = new BigDecimal(0.01); System.out.println(bd1.add(bd2)); //使用BigDecimal的String參數的構造器 BigDecimal bd3 = new BigDecimal("0.05"); BigDecimal bd4 = new BigDecimal("0.01"); System.out.println(bd3.add(bd4));
這三個輸出結果是不一樣的:
所以在計算的時候,應該先把數字轉換成String類型的,才能得到最精確的值.
附常用的方法:
add 加
subtract 減
multiply 乘
divide 除
abs 絕對值
getScale 根據一個規則取幾位小數
pow 幾次方
中文API鏈接:
http://www.apihome.cn/api/java/BigDecimal.html