BigDecimal 除法抛出 ArithmeticException:即使我检查它也被零除

BigDecimal division throwing ArithmeticException: Division by zero even when i check against it

大家好,我目前正在与 talend 合作,必须计算一些 KPI。

我现在每次都得到 ArithmeticException: Division by zero 即使我在不​​同的计算中遵循相同的模式并且它们工作没有问题。

(((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.checkIfNullnull 值设置为零(在本例中为 BigDecimal.ZERO)我也尝试了各种变体(单独的 null 检查等)

此外,由于我在使用 talend,因此我必须使用三元运算符。

使用 == 来测试 BigDecimal 是个坏主意。

即使假设 checkIfNull returns Decimal.ZEROnull 时,您仍然会遇到 rechnung1.netto 可能是零的问题,即 != Decimal.ZERO.

还有 equals 的问题是值和比例必须相等才能使两个 BigDecimal 值被视为相等。

这是测试(非空)BigDecimal 值为零的安全方法:

 BigDecimal x = ...
 if (x.compareTo(BigDecimal.ZERO) == 0) {
     // it is zero
 } else {
     // it is not zero
 }