Verifique si un valor está dentro de un rango de números


109

Quiero comprobar si un valor está en un rango aceptado. Si es así, hacer algo; de lo contrario, algo más.

El rango es 0.001-0.009. Sé cómo usar varios ifpara verificar esto, pero quiero saber si hay alguna forma de verificarlo en una sola ifdeclaración.


14
&&¿operador? ...
Šime Vidas

Respuestas:


216

Estás haciendo una pregunta sobre comparaciones numéricas, por lo que las expresiones regulares realmente no tienen nada que ver con el problema. Tampoco necesita ifdeclaraciones "múltiples " para hacerlo:

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

Podría escribir usted mismo una función "entre ()":

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

Tu codificación es buena pero no se ajusta a la pregunta, eso es todo. Sin ofender. Siempre juzgo una solución por lo bien que responde a la pregunta. Eso es porque generalmente asumo que las personas saben lo que están pidiendo. La marca de verificación me muestra que este no fue el caso con este interrogador.
Leif

7
Bueno, aprecio lo que está diciendo, pero sugiero que quizás desee reconsiderar la premisa de que la gente aquí generalmente "sabe lo que está pidiendo". Eso puede ser cierto en un tiempo muy estrecho sentido, pero a menudo estas preguntas reflejar alguna decisión de diseño mal que debe ser revisado. He estado respondiendo preguntas sobre programación durante unos 30 años, así que lo he visto suceder muchas veces. Por supuesto, prefiero mejores preguntas, en las que se explica claramente el objetivo general. Aquí, realmente no tenemos idea del motivo de la pregunta, por lo que no tenemos contexto.
Puntiagudo

6
Me gusta usar la sintaxis así: if (0.001 <= x && x <= 0.009) {...} me parece un poco más claro :)
Omri

49

Aquí hay una opción con una única comparación.

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

Esto es dulce, no importa si el mínimo es menor o el máximo es menor, seguirá funcionando. De hecho, podría ser mejor llamar a min, max algo como start, end. gran algo de cualquier manera gracias!
James Harrington

19

Si debe usar una expresión regular (¡y realmente, no debería!), Esto funcionará:

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

debería funcionar, es decir

  • ^ nada antes,
  • seguido de 0.00(nb: escape de barra invertida para el .carácter)
  • seguido de 1 a 8 y cualquier número de dígitos adicionales
  • o 9, seguido de cualquier número de ceros
  • $: seguido de nada más

8

Si ya está usando lodash, puede usar la inRange()función: 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

Me gusta la betweenfunción de Pointy, así que escribí una similar que funcionó bien para mi escenario.

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

así que si quisiera ver si xestaba dentro de ± 10 de y:

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

Lo estoy usando para detectar una pulsación larga en el móvil:

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

Si desea que su código elija un rango específico de dígitos, asegúrese de usar el &&operador en lugar 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

Debe querer determinar el límite inferior y superior antes de escribir la condición

function between(value,first,last) {

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

}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.