Java中BigDecimal类型详解

初学者在使用BigDecimal类型时,非常容易用错,Java中的简单浮点数类型float和double直接运算,精度不准,推荐使用 BigDecimal 计算。

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);
 
    }

你可能感兴趣的:(Java中BigDecimal类型详解)