Java在計算浮點數的時候,因爲二進制沒法精確表示0.1的值(就比如十進制沒法精確表示1/3同樣),因此通常會對小數格式化處理.html
可是若是涉及到金錢的項目,一點點偏差都不能有,必須使用精確運算的時候,就能夠使用BigDecimal方法計算.java
可是在使用中還須要注意一個問題:api
//直接使用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));
這三個輸出結果是不同的:ide
因此在計算的時候,應該先把數字轉換成String類型的,才能獲得最精確的值.post
附經常使用的方法:spa
add 加code
subtract 減htm
multiply 乘blog
divide 除ip
abs 絕對值
getScale 根據一個規則取幾位小數
pow 幾回方
中文API連接:
http://www.apihome.cn/api/java/BigDecimal.html