我们最近在验证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语句时,它再次不正确。
之前有没有人遇到过这种情况,或者可以解释为什么第一个例子应该是正确的? 或者这可能是一个错误?
答案 0 :(得分:-2)
你有不同的结果,因为在比较&lt;和&gt;如果你做浮动比较,但是在第一个例子中你做了一个浮点数和一个int比较(所以你不是严格地将浮点等式的结果变为0)。