不应对C#代码错误地触发相等的浮点数(S1244)进行测试吗?

时间:2017-03-10 09:27:38

标签: c# sonarqube

我们最近在验证C#代码时遇到了一些奇怪的SonarQube规则。 不应测试浮点数的相等性(S1244)

我们理解为什么存在这个规则并且我们应该纠正错误,但我们无法弄清楚为什么我们的一些代码是正确的而其他部分没有。

double valueToCheck;    
if(valueToCheck > 0f || valueToCheck < 0)
{
   do something
}

第一个示例不会触发S1244错误,但

double valueToCheck;    
if(valueToCheck > 0f || valueToCheck < 0f)
{
   do something
}

确实

当我们自己看这个时,我们认为第一个例子仍然应该给出错误,因为if语句中的第二部分仍然不使用float。

然而显然无关紧要。但是当我们将第二个float添加到if语句时,它再次不正确。

之前有没有人遇到过这种情况,或者可以解释为什么第一个例子应该是正确的? 或者这可能是一个错误?

1 个答案:

答案 0 :(得分:-2)

你有不同的结果,因为在比较&lt;和&gt;如果你做浮动比较,但是在第一个例子中你做了一个浮点数和一个int比较(所以你不是严格地将浮点等式的结果变为0)。