比较分母== 0.0d以防止除零是否正确?

时间:2017-11-03 22:05:17

标签: java double

SonarQube有一个rule报告以下代码中的错误,指出" 浮点数不应进行相等性测试"。一般来说这个规则是合理的,但在这种情况下,对我来说似乎是误报。如果是这样,我想标记它,而不是使用Double.compare的结构解决它,检查+/-InfinityNaN的中间结果,或类似的事情。

public void f(double denominator)
{
    if (denominator == 0.0d)
        throw new IllegalArgumentException("Division by zero.");

    // code that involves division by denominator ...
}

因此问题:以上代码是否抛出IllegalArgumentException当且仅当denominator除以(仅在包含double的表达式中)将导致+/-InfinityNaN中间值?

1 个答案:

答案 0 :(得分:0)

我们应该避免test float的相等性,因为在二进制中表示小数的行为。

您问的问题基本上是上述代码是否有效? 取决于test()的使用方式,具体来说,如果您没有明确地传入0.0作为参数而是执行f之类的操作,则它将不会捕获并除以十进制非常CLOSE为0。

P.S。如果你想要小数精度,请使用BigDecimal。