【JAVA】BigDecimal判断是否为0, / by zero的问题修复
bug场景
我要处理一个任务完成率的计算,任务完成率pct = 实际值 real / 任务值 task
进入计算前,我需要判断task是否为空,或者为0,防止除法出错。
之前使用了equal方法
if(!task.equals(BigDecimal.ZERO))//开始计算
因为刚开始测试的时候没有出现问题,所以一直这样用着,昨天突然发现系统报表一直在报错
java.lang.ArithmeticException: / by zero
就知道这个判断有问题了,后来发现,BigDecimal的equal方法,还判断了精度,0和0.0并不相等。所以把全局的类似判断,全部修改,使用compare进行处理。
#改进 - compare
if (task.compareTo(BigDecimal.ZERO) != 0) {//开始计算
}
#另外的思路-signum
signum 方法会返回该 BigDecimal 对象的符号函数值。若值为 0,则返回 0;若值小于 0,则返回 -1;若值大于 0,则返回 1。
if (task.signum() != 0) {//开始计算
}