web-dev-qa-db-fra.com

si la valeur est entre deux nombres

Je veux pouvoir vérifier si une valeur est dans une plage de nombres. Ceci est mon code jQuery ...

if ((year < 2099) && (year > 1990)){
    return 'good stuff';
}

Existe-t-il un moyen plus simple de faire cela dans jQuery? Par exemple, y a-t-il quelque chose comme ça ...

if (1990 < year < 2099){
    return 'good stuff';
}
10
Inigo

Dans de nombreuses langues, la deuxième façon sera évaluée de gauche à droite de manière incorrecte par rapport à ce que vous voulez.

En C, par exemple, 1990 < year sera évalué à 0 ou 1, qui devient alors 1 < 2099, ce qui est toujours vrai, bien sûr.

Javascript est assez similaire à C: 1990 < year renvoie true ou false, et ces expressions booléennes semblent se comparer numériquement à 0 et 1 respectivement.

Mais en C #, il ne sera même pas compilé, ce qui vous donne l'erreur:

erreur CS0019: L'opérateur '<' ne peut pas être appliqué aux opérandes de type 'bool' et 'int'

Vous obtenez une erreur similaire de Ruby, alors que Haskell vous indique que vous ne pouvez pas utiliser < deux fois dans la même expression infixe.

De mémoire, Python est le seul langage qui gère la configuration "entre" de cette manière:

>>> year = 5
>>> 1990 < year < 2099
False
>>> year = 2000
>>> 1990 < year < 2099
True

En fin de compte, le premier moyen (x < y && y < z) est toujours votre pari le plus sûr.

20
Mark Rushakoff

Vous pouvez faire votre propre méthode:

// jquery
$(function() {
    var myNumber = 100;
    try {
        if (myNumber.isBetween(50, 150)) 
            alert(myNumber + " is between 50 and 100.");
        else 
            alert(myNumber + " is not between 50 and 100.");
    } catch (e) {
        alert(e.message());
    }

});

// js prototype
if (typeof(Number.prototype.isBetween) === "undefined") {
    Number.prototype.isBetween = function(min, max, notBoundaries) {
        var between = false;
        if (notBoundaries) {
            if ((this < max) && (this > min)) between = true;
            alert('notBoundaries');
        } else {
            if ((this <= max) && (this >= min)) between = true;
            alert('Boundaries');
        }
        alert('here');
        return between;
    }
}

j'espère que cela t'aides.

Max

9
Max Sylvester

Le moyen le plus simple et rapide d’y parvenir est de créer une fonction comme celle-ci:

function inRange(n, nStart, nEnd)
{
    if(n>=nStart && n<=nEnd) return true;
    else return false;
}

Ensuite, utilisez ceci comme suit:

inRange(500, 200, 1000) => this return true;

Ou comme ceci:

inRange(199, 200, 1000) => this return false;
1
khalid

À partir d'une solution similaire, cliquez ici: http://indisnip.wordpress.com/2010/08/26/quicktip-check-if-a-number-is-bb-number /

$.fn.between = function(a,b){
    return (a < b ? this[0] >= a && this[0] <= b : this[0] >= b && this[0] <= a);
}
0
Allan Taylor

Si vous n'aimez pas l'opérateur booléen, vous pouvez toujours utiliser des instructions if imbriquées:

if (1990 < year)
{
    if( year < 2099)
        return 'good stuff';
}
0
dckrooney