bigdecimal

本文介绍了在Java中使用BigDecimal进行精确数值计算,特别是除法运算时如何避免`ArithmeticException`。通过示例代码展示了如何使用divide方法的重载形式,设置精度和舍入模式来确保计算结果的准确性。同时,文章还提供了加、减、乘法的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   

    private static void test01() {
        System.out.println("a1= ");
        String a1 = new Scanner(System.in).nextLine();
        System.out.println("a2 = ");
        String a2 = new Scanner(System.in).nextLine();
        if(StringUtils.isNotBlank(a1) && !a1.equals("0") && StringUtils.isNotBlank(a2) && !a2.equals("0")) {
            BigDecimal b1 = new BigDecimal(a1);
            BigDecimal b2 = new BigDecimal(a2);
            //double b3 = b1.doubleValue() / b2.doubleValue();
            System.out.println("======");
            BigDecimal b4 = b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP);
            //System.out.println(b1);
            //System.out.println(b2);
            System.out.println(b4.toString());
        }
        System.out.println("-------------------------------");
        //System.out.println(new BigDecimal(b3).setScale(2,BigDecimal.ROUND_HALF_UP));
        //System.out.println(b3.stripTrailingZeros().toPlainString());
    }

private static void test02() {
BigDecimal bignum1 = new BigDecimal(“10”);
BigDecimal bignum2 = new BigDecimal(“5”);
BigDecimal bignum3 = null;

//加法
bignum3 = bignum1.add(bignum2);
System.out.println(“和 是:” + bignum3);

//减法
bignum3 = bignum1.subtract(bignum2);
System.out.println(“差 是:” + bignum3);

//乘法
bignum3 = bignum1.multiply(bignum2);
System.out.println(“积 是:” + bignum3);

//除法
bignum3 = bignum1.divide(bignum2);
System.out.println(“商 是:” + bignum3);
}

===================================
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法
错误出现在:
b1.divide(b2)

JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常。

解决方法:

b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP);
注意这个divide方法有两个重载的方法,一个是传两个参数的,一个是传三个参数的:

两个参数的方法:

@param divisor value by which this {@code BigDecimal} is to be divided. 传入除数

@param roundingMode rounding mode to apply. 传入round的模式

三个参数的方法:

@param divisor value by which this {@code BigDecimal} is to be divided. 传入除数
@param scale scale of the {@code BigDecimal} quotient to be returned. 传入精度
@param roundingMode rounding mode to apply. 传入round的模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值