SonarQube有一个rule报告以下代码中的错误,指出" 浮点数不应进行相等性测试"。一般来说这个规则是合理的,但在这种情况下,对我来说似乎是误报。如果是这样,我想标记它,而不是使用Double.compare
的结构解决它,检查+/-Infinity
,NaN
的中间结果,或类似的事情。
public void f(double denominator)
{
if (denominator == 0.0d)
throw new IllegalArgumentException("Division by zero.");
// code that involves division by denominator ...
}
因此问题:以上代码是否抛出IllegalArgumentException
当且仅当denominator
除以(仅在包含double
的表达式中)将导致+/-Infinity
或NaN
中间值?
答案 0 :(得分:0)
我们应该避免test float的相等性,因为在二进制中表示小数的行为。
您问的问题基本上是上述代码是否有效?
取决于test()
的使用方式,具体来说,如果您没有明确地传入0.0作为参数而是执行f
之类的操作,则它将不会捕获并除以十进制非常CLOSE为0。
P.S。如果你想要小数精度,请使用BigDecimal。