天天看點

BigDecimal加減乘除

Java中的簡單浮點數類型float和double直接運算,精度不準,推薦使用 BigDecimal 計算。

BigDecimal bignum1 = new BigDecimal(10.0);  

BigDecimal bignum2 = new BigDecimal(10.0);  

//加法  

add =  bignum1.add(bignum2);       

//減法  

subtract = bignum1.subtract(bignum2);   

//乘法  

multiply = bignum1.multiply(bignum2);   

//除法  

divide = bignum1.divide(bignum2);  

.divide(new BigDecimal(18),2, BigDecimal.ROUND_HALF_UP) // >=5 四舍五入      

*注意*:除法的時候一定要在divide方法中傳遞第二個參數,定義精确到小數點後幾位,否則在不整除的情況下,結果是無限循環小數時,就會抛出異常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。

一個簡單的測試類:

@Test
    public void redisTestjisuan(){
        BigDecimal benjin = new BigDecimal(100000.00);
        int qishu = 3;
        BigDecimal lilv = new BigDecimal(0.015);
        // 每月還款額=[貸款本金×月利率×(1+月利率)^還款月數]÷[(1+月利率)^還款月數-1]
        BigDecimal big = (lilv.add(new BigDecimal(1.0)).pow(qishu)).subtract(new BigDecimal(1));
        BigDecimal divide = (benjin.multiply(lilv).multiply(lilv.add(new BigDecimal(1.0)).pow(qishu))).divide(big,2,RoundingMode.HALF_UP);
        logger.info("每月還款額="+divide);

    }
           

繼續閱讀