检查值是否在数字范围内

Sot*_*ris 81 javascript if-statement

我想检查一个值是否在可接受的范围内.如果是,做某事; 否则,别的东西.

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

Poi*_*nty 183

你问一个关于数字比较的问题,所以正则表达式实际上与问题无关.您不需要"多个if"语句来执行此操作:

if (x >= 0.001 && x <= 0.009) {
  // something
}
Run Code Online (Sandbox Code Playgroud)

你可以自己写一个"between()"函数:

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

  • 这是一个旨在帮助人们的网站.我认为提供一个糟糕的解决方案并不会有所帮助. (73认同)
  • @Leif Pointy至少对我需要的是正确的.我不知道怎么会认为正则表达式是必要的.当我看到解决方案时,我说"OMG我问的是什么?!!".无论如何.尖尖的,谢谢你的解决方案:) (12认同)
  • 好吧,我很欣赏你所说的话,但我建议你可以重新考虑一下这样一个前提,即这里的人一般"知道他们要求的是什么".这可能在非常狭窄的意义上是正确的,但通常这些问题反映了应该重新审视的一些糟糕的设计决策.我已经回答了大约30年的编程问题了,所以我已经看过很多次了.我当然更喜欢更好的问题,其中明确解释了总体目标.在这里,我们真的不知道问题的*原因*,所以我们没有上下文. (5认同)
  • 我喜欢使用这样的语法:if(0.001 <= x && x <= 0.009){...}对我来说似乎有点清楚:) (4认同)
  • 我想,我们不时都有这些微弱的时刻. (3认同)

Ale*_*der 32

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

// 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
Run Code Online (Sandbox Code Playgroud)

  • 这很不错,无论最小值较低还是最大值较低,它仍然有效。事实上,将 min、max 称为 start、end 之类的名称可能会更好。不管怎样,算法都很棒,谢谢! (5认同)
  • 这有点愚蠢,它不仅可能更慢,而且代码的作用也不太明显 (5认同)
  • 有人请考虑一下时间复杂度吗!?我会采用公认的解决方案,因为 θ(2) 处的两次比较优于 O(4) 处的一次比较和三个算术运算。 (3认同)
  • 我从来没有声称它是你想象的那样。尽管如此,这是一个可行的选择。 (3认同)
  • 鲜有血腥的创意人仍然存在。向懒惰的方法致敬。 (2认同)

Aln*_*tak 17

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

/^0\.00([1-8]\d*|90*)$/
Run Code Online (Sandbox Code Playgroud)

应该工作,即

  • ^ 以前没事,
  • 然后是0.00(nb:字符的反斜杠转义.)
  • 后跟1到8,以及任意数量的附加数字
  • 或9,后跟任意数量的零
  • $:其次没有别的


Har*_*_OK 11

如果您已经在使用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
Run Code Online (Sandbox Code Playgroud)