检查带有公差的值

我试图检查一个值是否等于+或 – 2是另一个值。

这就是我所遇到的。

for (int lineNumber : errorLineList) { if (lineNumber == startLineNumber || lineNumber == (startLineNumber + 1) || lineNumber == (startLineNumber + 2) || lineNumber == (startLineNumber - 1) || lineNumber == (startLineNumber - 2)) { lineFound = true; break; } } 

但是如果我想要容差为5,那么我必须添加10个检查。

在java中有没有其他优雅的方法来做到这一点。

使用双精度时通常需要这样做,因为您可以获得较小的舍入误差。

 if(Math.abs(lineNumber - startLineNumber) <= 2) 

您可以将2更改为5.这就是说; 如果两个值之间的差值小于2.即它可以是-2,-1,0,1或2。

对于double ,类似的解决方案是使用测试“相等”

 if(Math.abs(a - b) < ERR) // where ERR is 1e-4 or 1e-9 

ERR的良好价值取决于具体情况。

您对价值差异感兴趣。 你不在乎什么价值更高,你只是对他们的差异感兴趣。 我们可以通过lineNumber - startLineNumber获取lineNumber - startLineNumber 。 这很好,但它产生正值和负值。 因此,当我们得到这个差异的绝对值时,我们可以将它们的距离用于比较。

 if ( Math.abs( lineNumber - startLineNumber ) <= 10 ) { // values are in tolerance -10 .. +10, ... 21 values // the range of tolerance in now simple changeable by one number // .. the distance of values, which can be defined // as a constant wherever you want, // static final field, property file, .. } 

当然:

 int tolerance = 5; //or any other value you want... for (int lineNumber : errorLineList) { if(lineNumber <= (startLineNumber + tolerance) && lineNumber >= (startLineNumber - tolerance)){ lineFound = true; break; } } 

怎么样

 if (lineNumber >= (startLineNumber - 2) && lineNumber <= (startLineNumber + 2))