Проверьте, находится ли значение в диапазоне чисел
Я хочу проверить, находится ли значение в допустимом диапазоне. Если да, чтобы сделать что-то; иначе что-то еще.
Диапазон составляет 0.001-0.009
. Я знаю, как использовать несколько if
чтобы проверить это, но я хочу знать, есть ли способ проверить это в одном операторе if
.
Ответы
Ответ 1
Вы задаете вопрос о числовых сравнениях, поэтому регулярные выражения действительно не имеют ничего общего с этой проблемой. Для этого вам не нужны "несколько if
" операторов:
if (x >= 0.001 && x <= 0.009) {
// something
}
Вы можете написать себе функцию "между()":
function between(x, min, max) {
return x >= min && x <= max;
}
// ...
if (between(x, 0.001, 0.009)) {
// something
}
Ответ 2
Вот вариант только с одним сравнением.
// 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
Ответ 3
Если вы должны использовать regexp (и действительно, вы не должны!), это будет работать:
/^0\.00([1-8]\d*|90*)$/
должен работать, т.е.
-
^
ничего раньше,
- за которым следует
0.00
(nb: обратная слэш для символа .
)
- за которым следуют от 1 до 8, и любое количество дополнительных цифр
- или 9, за которым следует любое количество нулей
-
$
: далее ничего
Ответ 4
Мне нравится функция 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);
Ответ 5
Если вы хотите, чтобы ваш код выбирал определенный диапазон цифр, обязательно используйте оператор &&
вместо ||
,
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
}
Ответ 6
Вы должны определить нижнюю и верхнюю границу, прежде чем писать условие
function between(value,first,last) {
let lower = Math.min(first,last) , upper = Math.max(first,last);
return value >= lower && value <= upper ;
}
Ответ 7
Pointy прав, но если вы используете CoffeeScript, синтаксис выглядит примерно как ruby
shipping = (x) ->
switch
when 0 <= x <= 1500
150
when 1501 <= x <= 4000
350
when 4001 <= x <= 8000
550
when 8001 <= x <= 12000
750
when 12001 <= x <= 20000
950
when 20001 <= x <= 40000
1500
else 3000