【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) {
    //开始计算
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值