检查带有公差的值

Unn*_*ris 3 java

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

这就是我遇到的.

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

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

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

Pet*_*rey 21

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

if(Math.abs(lineNumber - startLineNumber) <= 2)
Run Code Online (Sandbox Code Playgroud)

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

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

if(Math.abs(a - b) < ERR) // where ERR is 1e-4 or 1e-9
Run Code Online (Sandbox Code Playgroud)

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


Gai*_*aim 6

您对价值差异感兴趣.你不在乎什么价值更高,你只是对他们的差异感兴趣.我们可以通过获得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, ..
}
Run Code Online (Sandbox Code Playgroud)