java.lang.ArithmeticException: / by zero 异常处理

项目场景:

在项目中,对某些金额数据进行规则校验时,会出现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);
        }
    }

版权声明:本文为qq_41814311原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。