Java BigDecimal除法抛出算术异常:即使在我检查时也被零除法
嘿,伙计们,我现在和talend一起工作,必须计算一些KPI 我每次都会得到算术异常:被零除,即使我在不同的计算中遵循相同的模式,并且它们工作没有问题Java BigDecimal除法抛出算术异常:即使在我检查时也被零除法,java,talend,ternary-operator,Java,Talend,Ternary Operator,嘿,伙计们,我现在和talend一起工作,必须计算一些KPI 我每次都会得到算术异常:被零除,即使我在不同的计算中遵循相同的模式,并且它们工作没有问题 (((functions_pattern.checkIfNull(opportunities1.tatsaechlicherumsatz)) == BigDecimal.ZERO) || ((functions_pattern.checkIfNull(rechnung1.netto)) == BigDecimal.ZERO)) ? Big
(((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\u pattern.checkIfNull
将null
值设置为零(在本例中为BigDecimal.zero
),我也尝试了各种不同的方法(单独的null
检查等)
另外,由于我与talend合作,我必须使用三元运算符。使用
==
测试大十进制
是个坏主意
即使假设checkIfNull
在null
时返回Decimal.ZERO
,您仍然存在rechnung1.netto
可能是的零的问题=代码>Decimal.ZERO
另外,equals
还有一个问题,即两个BigDecimal
值必须相等,才能认为相等
这是测试(非空)BigDecimal
值是否为零的安全方法:
BigDecimal x = ...
if (x.compareTo(BigDecimal.ZERO) == 0) {
// it is zero
} else {
// it is not zero
}