天天看點

java.math.BigDecimal 的使用

1:問題場景:在金額的計算中, 會出現精度丢失的情況。

    數字計算時,計算機會将數字轉換為最近似的二進制,在進行計算,這就會導緻計算結果精度不正确。

    例如:0.1+0.2 =0.30000000000000004   。這個問題在衆多程式設計語言中都出現過。

2:解決辦法:這個問題在java中是使用java.math.BigDecimal進行計算。

3:常用方法:加減乘除,比較大小,是否為0,保留n為小數,向上向下,四舍五入。

      A : 加減乘除   

          BigDecimal  num= new BigDecimal ("10");

          num.add(num);

          num.subtract(num);

          num.multiply(num);

          num.divide(num);

     B :比較大小,是否為0

         num.compareTo(num)==1

         這個方法結果有-1 ,0 ,1 分别表示小于,大于,等于

         BigDecimal.ZERO 則表示0

      C:保留n位小數,向上向下取整,四舍五入,當出現無限循環小數時使用

         setScale的第一個參數是小數位數, 這個示例是保留2位小數, 後面是四舍五入規則.

         直接移除n位:

         num.setScale(n,BigDecimal.ROUND_DOWN)

         進位:

         num.setScale(n,BigDecimal.ROUND_UP)

         四舍五入,5進位

         num.setScale(n,BigDecimal.ROUND_HALP_UP)

         四舍五入,5舍棄

         num.setScale(n,BigDecimal.ROUND_HALP_DOWN)

     D:當小數位過長出現科學計算法時,去除末尾0,方法:stripTrailingZeros() 。不顯示科學計算法 轉換string。

        num.stripTrailingZeros().toString()