2009-08-24 53 views
25

¿Cómo puedo probar una variable para determinar si contiene un número, y es un número entero?¿Cómo detectar si un número dado es un número entero?

por ejemplo

if (1.589 == integer) // false 
if (2 == integer) // true 

Alguna pista?

+0

posible duplicado de [¿Cómo comprobar si una variable es un número entero en Javascript?] (Http://desbordamiento de pila.com/questions/14636536/how-to-check-if-a-variable-is-an-integer-in-javascript) –

Respuesta

50
num % 1 === 0 

Esto convertirá num para escribir Number primero, por lo que cualquier valor que se puede convertir en un entero pasará la prueba (por ejemplo '42', true).

Si desea excluir estos, además, comprobar si hay

typeof num === 'number' 

También es posible usar parseInt() de hacer esto, es decir

parseInt(num) == num 

para un control sin tipo y

parseInt(num) === num 

para un cheque mecanografiado.

Tenga en cuenta que las pruebas no son equivalentes: Comprobación través parseInt() será primero convertir a String, por lo que por ejemplo true no pasará el cheque.

También tenga en cuenta que el cheque sin tipo a través de parseInt() manejará cadenas hexadecimales correctamente, pero se producirá un error de octales (es decir, cadenas numéricas con cero a la izquierda) ya que estos son reconocidos por parseInt() pero no por Number(). Si necesita manejar cadenas de decimales con ceros a la izquierda, deberá especificar el argumento de raíz.

+0

Éste lo hace, gracias. – jirkap

-1

Hay una función de javascript llamada isNaN (val) que devuelve verdadero si val no es un número.

Si desea utilizar val como un número, es necesario enviar contenido a través parseInt() o parseFloat()

EDIT: Uy. Se ha corregido el error que se menciona en el comentario

+1

Solo por el nombre de la función, creo que "isNaN" volvería verdadero si val "es * No * un Número", que es lo que significa NaN. ¿Error de tipografía? –

+1

isNaN (val) devuelve verdadero si val no es un número, pero también devuelve falso para números no enteros, por lo que no resolverá el problema. – Amok

2

¿Qué tal esto:

if((typeof(no)=='number') && (no.toString().indexOf('.')==-1)) 
+0

Eso no funcionará porque 8,000 sigue siendo un número entero. –

+1

Eso probablemente dependa de su definición (y caso de uso) del número entero – bdukes

+0

Hmm. Cierto. Para las preguntas inherentemente matemáticas, tiendo a pensar en ellas en términos de números y no de números, por lo tanto, mi comentario anterior. –

0

que podría o bien hacer uso de las capacidades de análisis sintáctico javas o así probar el operador módulo% ...

2

Que este no funciona:

if (parseInt(number, 10) == number) 
{ 
    alert(number + " is an integer."); 
} 
+1

Siempre debe incluir el parámetro radix: parseInt (número, 10) – Greg

+0

Vaya, sí. Arreglado. – paracycle

+0

@Greg: no necesariamente, uno podría querer que los hexadecimales pasen; los octal fallarán ya que 'parseInt()' los reconoce, pero no por 'Number()' – Christoph

6

Alguien tiene ya done it for you.

+0

Como @Greg dice más arriba (http://stackoverflow.com/questions/1323314/detecting-if-a-given-number- is-an-integer # comment-1157013), esto debería incluir el parámetro radix para parseInt. – bdukes

9

Esto funciona:

if (Math.floor(x) == x) 
+0

Esto tiene la ventaja de funcionar si x es 'falso'; –

4

podría utilizar la definición formal de número entero:

Math.floor(x) === x 
Cuestiones relacionadas