BigDecimal除法引发ArithmeticException:即使我进行检查也除以零

问题描述 投票:0回答:1

大家好,我目前正在与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一起工作,所以我必须使用三元运算符

预先感谢

java talend ternary-operator
1个回答
0
投票

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

即使假设checkIfNullDecimal.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
 }
© www.soinside.com 2019 - 2024. All rights reserved.