天天看點

五、帶有小數點進行精确計算時,請選擇 BigDecimal,而不是 double 或者 float

1、double 或者 float 存在的精度問題

當計算 1.03 - 0.42 時,按照正常得出的答案應該是 0.61

System.out.println(1.03 - 0.42 );      

但是實際結果去确實 0.6100000000000001

0.6100000000000001      
2、使用 BigDecimal 改造
public static void subtract() {
        // 執行個體化
        BigDecimal num1 = new BigDecimal(1.03);
        BigDecimal num2 = new BigDecimal(0.42);
        
        /*
         * setScale(int newScale, int roundingMode)
         *     參數一:newScale 保留小數點幾位
         *     參數二:roundingMode 小數點保留的方式,比如 BigDecimal.ROUND_HALF_UP 就是四舍五入
         */
        BigDecimal result = num1.subtract(num2).setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(result);
    }      
0.61