【问题标题】:BigDecimal division throwing ArithmeticException: Division by zero even when i check against itBigDecimal 除法抛出 ArithmeticException:除以零,即使我检查它
【发布时间】:2019-11-07 08:06:25
【问题描述】:

大家好,我目前正在与 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,因此我必须使用三元运算符。

【问题讨论】:

    标签: java talend ternary-operator


    【解决方案1】:

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

    即使假设checkIfNullnull 时返回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
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多