2009-08-24 19 views
25

Come posso verificare una variabile per verificare se contiene un numero ed è un numero intero?Come rilevare se un dato numero è un numero intero?

ad es.

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

Eventuali indizi?

+0

possibile duplicato di [Come verificare se una variabile è un intero in Javascript?] (Http:// StackOverflow.it/questions/14636536/how-to-check-if-a-variable-is-an-integer-in-javascript) –

risposta

50
num % 1 === 0 

Questo convertirà num digitare Number prima, in modo che qualsiasi valore che può essere convertito in un intero passerà il test (ad esempio '42', true).

Se si desidera escludere questi, inoltre verificare la presenza di

typeof num === 'number' 

Si potrebbe anche usare parseInt() per fare questo, cioè

parseInt(num) == num 

per un controllo non tipizzato e

parseInt(num) === num 

per un controllo dattilografato.

Si noti che i test non sono equivalenti: il controllo tramite parseInt() verrà convertito prima in String, quindi ad esempio true non supererà il controllo.

noti inoltre che il controllo untyped via parseInt() gestirà correttamente le stringhe esadecimali, ma sarà sicuro per ottali (cioè stringhe numeriche con zero iniziale) in quanto questi sono riconosciute da parseInt() ma non da Number(). Se è necessario gestire le stringhe decimali con zeri iniziali, è necessario specificare l'argomento radice.

+0

Questo lo fa, grazie. – jirkap

-1

C'è una funzione javascript chiamata isNaN (val) che restituisce true se val non è un numero.

Se si desidera utilizzare val come un numero, è necessario lanciare usando parseInt() o parseFloat()

EDIT: oops . Corretto l'errore come indicato nel commento

+1

Proprio dal nome della funzione, penserei che "isNaN" restituirebbe true se val "is * Not * a Number", che è ciò che NaN rappresenta. Errore di battitura? –

+1

isNaN (val) restituisce true se val non è un numero, ma restituisce false anche per i numeri non interi, quindi non risolverà il problema. – Amok

2

ne dite di questo:

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

Questo non funzionerà perché 8.000 è ancora un numero intero. –

+1

Questo probabilmente dipende dalla definizione (e dal caso d'uso) del numero intero – bdukes

+0

Hmm. Vero. Per questioni intrinsecamente matematiche, tendo a pensarle in termini di numeri e non di numeri - quindi, il mio commento sopra. –

0

si potrebbe o fare uso di Javas parsing capacità o così provare l'operatore modulo% ...

2

Sarebbe questo non funziona:

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

È necessario includere sempre il parametro radix: parseInt (numero, 10) – Greg

+0

Oops, sì. Aggiustato. – paracycle

+0

@Greg: non necessariamente: si potrebbe desiderare di passare gli esadecimali; gli ottali falliranno dato che sono riconosciuti da 'parseInt()' ma non da 'Number()' – Christoph

6

Qualcuno ha già done it for you.

+0

Come dice @Greg sopra (http://stackoverflow.com/questions/1323314/detecting-if-a-given-number- is-an-integer # comment-1157013), questo dovrebbe includere il parametro radix su parseInt. – bdukes

9

Questo funziona:

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

Questo ha il vantaggio di lavorare se x è 'falso'; –

4

è possibile utilizzare la definizione formale di numeri interi:

Math.floor(x) === x 
Problemi correlati