项目场景:
在项目中,对某些金额数据进行规则校验时,会出现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版权协议,转载请附上原文出处链接和本声明。