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.checkIfNull
将 null
值设置为零(在本例中为 BigDecimal.ZERO
)我也尝试了各种变体(单独的 null
检查等)
此外,由于我在使用 talend,因此我必须使用三元运算符。
使用 ==
来测试 BigDecimal
是个坏主意。
即使假设 checkIfNull
returns 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
}
大家好,我目前正在与 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.checkIfNull
将 null
值设置为零(在本例中为 BigDecimal.ZERO
)我也尝试了各种变体(单独的 null
检查等)
此外,由于我在使用 talend,因此我必须使用三元运算符。
使用 ==
来测试 BigDecimal
是个坏主意。
即使假设 checkIfNull
returns 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
}