项目场景:

在项目中,对某些金额数据进行规则校验时,会出现ArithmeticException异常。

问题描述

报错信息如下:

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at java.math.BigDecimal.divideAndRound(BigDecimal.java:4137)
	at java.math.BigDecimal.divide(BigDecimal.java:5214)
	at java.math.BigDecimal.divide(BigDecimal.java:1564)
	at java.math.BigDecimal.divide(BigDecimal.java:1625)
	at xxx.xxx.main(FileUtil.java:38)

原因分析:

当定义的 ”除数 ” 为整形时候(short int long)会抛出此异常,除数为整形时不可以为零。

	//测试demo
    public static void main(String[] args) {
        BigDecimal d = BigDecimal.valueOf(0.00);
        BigDecimal s = BigDecimal.valueOf(0.00);
        BigDecimal divide = d.divide(s,BigDecimal.ROUND_HALF_UP);
        System.out.println(divide);
    }

解决方案:

我们可以用判断Bigdecimal类型的值是否为0:
(BigDecimal.ZERO).compareTo(s) == 0,可以比较是否等于0,返回true则等于0,返回false,则不等于0

    public static void main(String[] args) {
        BigDecimal d = BigDecimal.valueOf(0.000);
        BigDecimal s = BigDecimal.valueOf(0.00);
        if ((BigDecimal.ZERO).compareTo(s) == 0 ) {
            System.out.println(d);
        }else{
            BigDecimal divide = d.divide(s,BigDecimal.ROUND_HALF_UP);
            System.out.println(divide);
        }
    }
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐