it-swarm.com.de

Prüfen Sie, ob ein Wert innerhalb eines Zahlenbereichs liegt

Ich möchte prüfen, ob ein Wert in einem akzeptierten Bereich liegt. Wenn ja, etwas zu tun; sonst etwas anderes.

Der Bereich ist 0.001-0.009. Ich kann mehrere if verwenden, um dies zu überprüfen, aber ich möchte wissen, ob es eine Möglichkeit gibt, dies in einer einzelnen if-Anweisung zu überprüfen.

65
Sotiris

Sie stellen eine Frage zu numerischen Vergleichen. Daher haben reguläre Ausdrücke wirklich nichts mit dem Problem zu tun. Dazu benötigen Sie keine "multiple if" -Anweisung:

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

Sie könnten sich selbst eine "between ()" - Funktion schreiben:

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

Wenn Sie müssen einen Regex verwenden (und das sollten Sie eigentlich nicht!), Wird dies funktionieren:

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

sollte funktionieren, d.h.

  • ^ nichts vorher,
  • gefolgt von 0.00 (nb: Escape für das .-Zeichen)
  • gefolgt von 1 bis 8 und einer beliebigen Anzahl zusätzlicher Ziffern
  • oder 9, gefolgt von einer beliebigen Anzahl von Nullen
  • $: gefolgt von nichts anderem
16
Alnitak

Hier ist eine Option mit nur einem Vergleich.

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

Ich mag die between-Funktion von Pointy, also schrieb ich eine ähnliche, die für mein Szenario gut funktionierte.

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

wenn Sie also sehen möchten, ob sich x innerhalb von ± 10 von y befand:

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

Ich benutze es, um ein langes Drücken auf dem Handy zu erkennen:

//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);
2
Scott Beeson

Wenn Sie möchten, dass Ihr Code einen bestimmten Ziffernbereich auswählt, verwenden Sie unbedingt den Operator && anstelle von ||

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
}

0
Fay Vor