Controlla se un valore è compreso in un intervallo di numeri


110

Voglio controllare se un valore è in un intervallo accettato. Se sì, per fare qualcosa; altrimenti qualcos'altro.

La gamma è 0.001-0.009. So come utilizzare più ifper verificarlo, ma voglio sapere se esiste un modo per verificarlo in una singola ifistruzione.


14
&&operatore? ...
Šime Vidas

Risposte:


218

Stai facendo una domanda sui confronti numerici, quindi le espressioni regolari non hanno davvero nulla a che fare con il problema. Non hai nemmeno bisogno di ifistruzioni "multiple " per farlo:

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

Potresti scrivere una funzione "between ()":

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

La tua codifica è buona ma non si adatta alla domanda, tutto qui. Senza offesa. Giudico sempre una soluzione in base a quanto bene risponde alla domanda. Questo perché generalmente presumo che le persone sappiano cosa stanno chiedendo. Il segno di spunta mi mostra che questo non era il caso di questo interrogante.
Leif

7
Bene, apprezzo quello che dici, ma ti suggerisco di riconsiderare la premessa che le persone qui generalmente "sanno quello che chiedono". Ciò può essere vero in un senso molto ristretto , ma spesso queste domande riflettono una decisione di progettazione sbagliata che dovrebbe essere rivista. Ho risposto a domande sulla programmazione da circa 30 anni, quindi l'ho visto accadere molte volte. Ovviamente preferisco domande migliori, in cui l'obiettivo generale è chiaramente spiegato. Qui, non abbiamo davvero idea del motivo della domanda, quindi non abbiamo contesto.
Pointy

6
Mi piace usare la sintassi in questo modo: if (0.001 <= x && x <= 0.009) {...} mi sembra un po 'più chiara :)
Omri

50

Ecco un'opzione con un solo confronto.

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

Questo è dolce, non importa se min è inferiore o max è inferiore, funzionerà comunque. In effetti potrebbe essere meglio chiamare min, max qualcosa come inizio, fine. ottimo algo in ogni caso grazie!
James Harrington

19

Se devi usare una regexp (e davvero, non dovresti!) Funzionerà:

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

dovrebbe funzionare, ad es

  • ^ niente prima,
  • seguito da 0.00(nb: backslash escape per il .carattere)
  • seguito da 1 a 8 e qualsiasi numero di cifre aggiuntive
  • o 9, seguito da qualsiasi numero di zeri
  • $: seguito da nient'altro

8

Se stai già utilizzando lodash, puoi utilizzare la inRange()funzione: 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

Mi piace la betweenfunzione di Pointy, quindi ne ho scritta una simile che ha funzionato bene per il mio scenario.

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

quindi, se volessi vedere se xera entro ± 10 da y:

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

Lo sto usando per rilevare una pressione prolungata sul cellulare:

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

Se desideri che il tuo codice scelga un intervallo specifico di cifre, assicurati di utilizzare l' &&operatore invece del ||.

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

È necessario determinare il limite inferiore e superiore prima di scrivere la condizione

function between(value,first,last) {

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

}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.