Überprüfen Sie, ob ein Wert innerhalb eines Zahlenbereichs liegt


109

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

Die Reichweite beträgt 0.001-0.009. Ich weiß, wie man mehrere verwendet if, um dies zu überprüfen, aber ich möchte wissen, ob es eine Möglichkeit gibt, dies in einer einzelnen ifAnweisung zu überprüfen .


14
&&Operator? ...
Šime Vidas

Antworten:


216

Sie stellen eine Frage zu numerischen Vergleichen, sodass reguläre Ausdrücke wirklich nichts mit dem Problem zu tun haben. Sie benötigen dazu auch keine "mehreren if" Anweisungen:

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

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

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

Ihre Codierung ist gut, passt aber nicht zur Frage, das ist alles. Nichts für ungut. Ich beurteile eine Lösung immer danach, wie gut sie die Frage beantwortet. Das liegt daran, dass ich im Allgemeinen davon ausgehe, dass die Leute wissen, wonach sie fragen. Das Häkchen zeigt mir, dass dies bei diesem Fragesteller nicht der Fall war.
Leif

7
Nun, ich weiß zu schätzen, was Sie sagen, aber ich schlage vor, dass Sie die Prämisse überdenken möchten, dass die Leute hier im Allgemeinen "wissen, wonach sie fragen". Das mag im engeren Sinne zutreffen , aber oft spiegeln diese Fragen eine schlechte Entwurfsentscheidung wider, die erneut geprüft werden sollte. Ich beantworte Programmierfragen seit ungefähr 30 Jahren, also habe ich es oft gesehen. Ich bevorzuge natürlich bessere Fragen, bei denen das Gesamtziel klar erklärt wird. Hier haben wir wirklich keine Ahnung von dem Grund für die Frage, also haben wir keinen Kontext.
Pointy

6
Ich benutze die Syntax gerne so: if (0.001 <= x && x <= 0.009) {...} scheint mir etwas klarer zu sein :)
Omri

49

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

Dies ist süß, es spielt keine Rolle, ob min niedriger oder max niedriger ist, es wird immer noch funktionieren. In der Tat könnte es besser sein, min, max so etwas wie Start, Ende zu nennen. super algo so oder so danke!
James Harrington

19

Wenn Sie müssen einen regulären Ausdruck verwenden (und wirklich, sollten Sie nicht!) Dies funktionieren wird:

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

sollte funktionieren, dh

  • ^ nichts vorher,
  • gefolgt von 0.00(nb: Backslash-Escape für den .Charakter)
  • 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

7

Wenn Sie bereits verwenden lodash, können Sie die folgende inRange()Funktion verwenden: 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

3

Ich mag Pointys betweenFunktion, also habe ich eine ähnliche geschrieben, die für mein Szenario gut funktioniert hat.

/**
 * 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 der Wert xinnerhalb von ± 10 liegt y:

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

Ich verwende es zum Erkennen eines langen Drucks auf dem Handy:

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

1

Wenn Sie möchten, dass Ihr Code einen bestimmten Ziffernbereich auswählt, verwenden Sie 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

Sie müssen die Unter- und Obergrenze bestimmen wollen, bevor Sie die Bedingung schreiben

function between(value,first,last) {

 let lower = Math.min(first,last) , upper = Math.max(first,last);
 return value >= lower &&  value <= upper ;

}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.