Проверьте, находится ли значение в диапазоне чисел - PullRequest
75 голосов
/ 23 июня 2011

Я хочу проверить, находится ли значение в допустимом диапазоне. Если да, чтобы сделать что-то; в противном случае, что-то еще.

Диапазон составляет 0.001-0.009. Я знаю, как использовать несколько if, чтобы проверить это, но я хочу знать, есть ли способ проверить это в одном выражении if.

Ответы [ 5 ]

174 голосов
/ 23 июня 2011

Вы задаете вопрос о числовых сравнениях, поэтому регулярные выражения на самом деле не имеют ничего общего с этой проблемой. Вам не нужны «множественные if» операторы, чтобы сделать это, либо:

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

Вы можете написать себе функцию "ween () ":

function between(x, min, max) {
  return x >= min && x <= max;
}
// ...
if (between(x, 0.001, 0.009)) {
  // something
}
20 голосов
/ 09 апреля 2018

Вот вариант только с одним сравнением.

// 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
17 голосов
/ 23 июня 2011

Если вы должны использовать регулярное выражение (и действительно, вы не должны!), Это будет работать:

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

должно работать, то есть

  • ^ ничего раньше,
  • , за которым следует 0.00 (nb: обратный слеш для символа .)
  • , затем от 1 до 8 и любое количество дополнительных цифр
  • или 9, за которыми следует любое количество нулей
  • $: за ним ничего не следует
2 голосов
/ 07 июня 2017

Мне нравится функция 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);
0 голосов
/ 13 мая 2018

Если вы хотите, чтобы ваш код выбирал определенный диапазон цифр, обязательно используйте оператор && вместо ||.

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...