大家好,我目前正在与talend合作,必须计算一些KPI。
即使我在不同的计算中遵循相同的模式并且它们正常工作也没有问题,但我现在每次都得到ArithmeticException:除以零。
(((functions_pattern.checkIfNull(opportunities1.tatsaechlicherumsatz)) ==
BigDecimal.ZERO) || ((functions_pattern.checkIfNull(rechnung1.netto)) ==
BigDecimal.ZERO))
? BigDecimal.ZERO
: (rechnung1.netto.divide(opportunities1.tatsaechlicherumsatz ,
java.math.MathContext.DECIMAL32))
functions_pattern.checkIfNull将一个空值设置为零(在这种情况下为BigDecimal.ZERO),我也对此进行了各种尝试(单独的空值检查等)
而且因为我与talend一起工作,所以我必须使用三元运算符
预先感谢
使用==
测试BigDecimal
是个坏主意。
即使假设checkIfNull
在Decimal.ZERO
时返回null
,您仍然有一个问题,即rechnung1.netto
可能为零,即!=
Decimal.ZERO
。
[equals
还有一个问题,就是要使两个BigDecimal
值相等,值和小数位必须相等。
这是测试(非空)BigDecimal
值是否为零的安全方法:
BigDecimal x = ...
if (x.compareTo(BigDecimal.ZERO) == 0) {
// it is zero
} else {
// it is not zero
}