检查值是否在数字范围内

IT技术 javascript if-statement
2021-02-11 09:19:10

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

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

6个回答

你问的是一个关于数字比较的问题,所以正则表达式真的与这个问题无关。您也不需要“多个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
}
嗯,我很欣赏你所说的,但我建议你可能要重新考虑这里的人通常“知道他们在要求什么”的前提。这在狭义可能是正确的,但通常这些问题反映了一些应该重新审视的糟糕设计决策。我已经回答编程问题大约 30 年了,所以我看到它发生了很多次。我当然更喜欢更好的问题,其中明确解释了总体目标。在这里,我们真的不知道这个问题原因,所以我们没有上下文。
2021-03-20 09:19:10
您的编码很好,但不符合问题,仅此而已。没有冒犯的意思。我总是通过解决问题的好坏来判断解决方案。那是因为我通常假设人们知道他们在要求什么。复选标记告诉我这个提问者不是这种情况。
2021-03-21 09:19:10
我喜欢使用这样的语法: if (0.001 <= x && x <= 0.009) {...} 对我来说似乎更清晰一些:)
2021-03-30 09:19:10

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

// 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 之类的东西可能会更好。无论哪种方式都很棒,谢谢!
2021-03-20 09:19:10
我从来没有声称它是你自己想象的任何东西。尽管如此,这是一个可行的选择。
2021-03-26 09:19:10
不会有人请考虑时间复杂度!?我会采用公认的解决方案,因为在 Θ(2) 处进行两次比较比在 O(4) 处进行一次比较和三次算术运算要好。
2021-03-31 09:19:10
这有点愚蠢,它不仅可能更慢,而且代码的作用也不那么明显
2021-04-06 09:19:10

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

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

应该工作,即

  • ^ 以前什么都没有
  • 后跟0.00(注意:字符的反斜杠转义.
  • 后跟 1 到 8,以及任意数量的附加数字
  • 或 9,后跟任意数量的零
  • $: 没有别的

如果您已经在使用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

我喜欢 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);