181 votes

Vérifier si une valeur est comprise dans une plage de nombres

Je veux vérifier si une valeur est dans une plage acceptée. Si oui, faire quelque chose ; sinon, autre chose.

La plage est 0.001-0.009 . Je sais comment utiliser plusieurs if pour vérifier cela, mais je veux savoir s'il existe un moyen de le vérifier dans une seule instruction if

334voto

Pointy Points 172438

Vous posez une question sur les comparaisons numériques, donc les expressions régulières n'ont vraiment rien à voir avec le problème. Vous n'avez pas non plus besoin d' if " pour le faire :

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

Vous pouvez écrire vous-même une fonction "entre ()":

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

78voto

Alexander Points 3377

Voici une option avec une seule comparaison.

 // 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

22voto

Alnitak Points 143355

Si vous devez utiliser une expression rationnelle (et vraiment, vous ne devriez pas !), cela fonctionnera :

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

devrait fonctionner, c'est-à-dire

  • ^ rien avant,
  • suivi de 0.00 (nb : échappement contre barre oblique inverse pour le caractère . )
  • suivi de 1 à 8, et un nombre quelconque de chiffres supplémentaires
  • ou 9, suivi d'un nombre quelconque de zéros
  • $ : suivi de rien d'autre

19voto

Haroldo_OK Points 352

Si vous utilisez déjà lodash , vous pouvez utiliser la fonction 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

4voto

Scott Beeson Points 1999

J'aime la fonction between Pointy, j'en ai donc écrit une similaire qui a bien fonctionné pour mon scénario.

 /**
 * 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;
}

donc si vous vouliez voir si x était à ±10 de y :

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

Je l'utilise pour détecter un appui long sur mobile :

 //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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X