检查值是否在数字范围内


109

我想检查一个值是否在可接受的范围内。如果是,请做点什么;否则,其他的东西。

范围是0.001-0.009。我知道如何使用倍数if来检查它,但是我想知道是否有任何方法可以在一个if语句中检查它。


14
&&操作员?...
森那维达斯

Answers:


217

您是在问有关数字比较的问题,因此正则表达式确实与该问题无关。您不需要“多个if”语句来执行此操作,或者:

if (x >= 0.001 && x <= 0.009) {
  // something
}

您可以为自己编写一个“ between()”函数:

function between(x, min, max) {
  return x >= min && x <= max;
}
// ...
if (between(x, 0.001, 0.009)) {
  // something
}

您的编码不错,但是不适合这个问题,仅此而已。没有冒犯的意思。我总是根据解决问题的能力来判断解决方案。那是因为我通常认为人们知道他们的要求。复选标记向我显示,此发问者并非如此。
Leif

7
好吧,我很欣赏您的发言,但我建议您可能要重新考虑以下前提:这里的人们通常“知道他们的要求”。从狭义上讲,这可能是正确的,但通常这些问题反映了一些错误的设计决策,应重新考虑。我已经回答了大约30年的编程问题,所以我已经看到它发生了很多次。我当然喜欢更好的问题,其中明确说明了总体目标。在这里,我们真的不知道问题的原因,因此我们没有上下文。
尖尖的

6
我喜欢使用这样的语法:if(0.001 <= x && x <= 0.009){...}对我来说似乎更清晰了:)
Omri 2014年

50

这是一个只有一个比较的选项。

// return true if in range, otherwise false
function inRange(x, min, max) {
    return ((x-min)*(x-max) <= 0);
}

console.log(inRange(5, 1, 10));     // true
console.log(inRange(-5, 1, 10));    // false
console.log(inRange(20, 1, 10));    // false

很好,无论min较低还是max较低都可以使用。实际上,最好叫min,max之类的东西,例如start,end。无论哪种方式都很好,谢谢!
詹姆斯·哈灵顿'18

19

如果您必须使用正则表达式(实际上,您不应该!),它将起作用:

/^0\.00([1-8]\d*|90*)$/

应该工作,即

  • ^ 以前没有
  • 后跟0.00(nb:字符的反斜杠转义.
  • 后跟1到8,以及任意数量的其他数字
  • 或9,后跟任意数量的零
  • $:之后没有其他

8

如果您已经在使用lodash,则可以使用以下inRange()功能:https : //lodash.com/docs/4.17.15#inRange

_.inRange(3, 2, 4);
// => true

_.inRange(4, 8);
// => true

_.inRange(4, 2);
// => false

_.inRange(2, 2);
// => false

_.inRange(1.2, 2);
// => true

_.inRange(5.2, 4);
// => false

_.inRange(-3, -2, -6);
// => true

3

我喜欢Pointy的between函数,因此我写了一个类似的函数,该函数在我的场景中效果很好。

/**
 * Checks if an integer is within ±x another integer.
 * @param {int} op - The integer in question
 * @param {int} target - The integer to compare to
 * @param {int} range - the range ±
 */
function nearInt(op, target, range) {
    return op < target + range && op > target - range;
}

因此,如果您想查看是否x在±10的范围内y

var x = 100;
var y = 115;
nearInt(x,y,10) = false

我将其用于检测移动设备上的长按:

//make sure they haven't moved too much during long press.
if (!nearInt(Last.x,Start.x,5) || !nearInt(Last.y, Start.y,5)) clearTimeout(t);

1

如果您希望代码选择特定范围的数字,请确保使用&&运算符而不是||

if (x >= 4 && x <= 9) {
  // do something
} else {
  // do something else
}

// be sure not to do this

if (x >= 4 || x <= 9) {
  // do something
} else {
  // do something else
}


0

您必须先确定下界和上限,然后再写条件

function between(value,first,last) {

 let lower = Math.min(first,last) , upper = Math.max(first,last);
 return value >= lower &&  value <= upper ;

}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.