Comment détecter si un nombre donné est un entier?

Comment puis-je tester une variable pour vérifier si elle contient un nombre, et c'est un entier?

Par exemple

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

Des indices?

26
demandé sur Zuul 2009-08-24 20:13:39

8 réponses

num % 1 === 0

Cela convertira num en premier type Number, de sorte que toute valeur pouvant être convertie en entier passera le test (par exemple '42', true).

Si vous voulez les exclure, vérifiez en outre

typeof num === 'number'

, Vous pouvez également utiliser parseInt() pour ce faire, ie

parseInt(num) == num

Pour une vérification non typée et

parseInt(num) === num

Pour une vérification dactylographiée.

Notez que les tests ne sont pas équivalents: vérifier via {[8] } va d'abord convertir en String, donc par exemple true ne passera pas le vérifier.

Notez également que la vérification non typée via parseInt() gérera correctement les chaînes hexadécimales, mais échouera pour les octales (c'est-à-dire les chaînes numériques avec zéro en tête) car elles sont reconnues par parseInt() mais pas par Number(). Si vous devez gérer des chaînes décimales avec des zéros en tête, vous devrez spécifier l'argument radix.

51
répondu Christoph 2009-08-24 17:03:33

Cela fonctionne:

if (Math.floor(x) == x)
9
répondu Randy Proctor 2013-10-08 12:40:45

Quelqu'un l'a déjà fait pour vous.

6
répondu DanDan 2009-08-24 16:17:23

Vous pouvez utiliser la définition formelle d'entier:

Math.floor(x) === x
4
répondu 2009-08-24 16:18:58

Que diriez-vous de ceci:

if((typeof(no)=='number') && (no.toString().indexOf('.')==-1))
2
répondu Johnno Nolan 2009-08-24 16:16:37

Cela ne fonctionnerait-il pas:

if (parseInt(number, 10) == number)
{
  alert(number + " is an integer.");
}
2
répondu paracycle 2009-08-24 16:45:12

Vous pouvez soit utiliser les capacités d'analyse javas, soit essayer l'opérateur modulo %...

0
répondu Gnark 2009-08-24 16:16:43

Il existe une fonction javascript appelée isNaN(val) qui renvoie true si val n'est pas un nombre.

Si vous voulez utiliser val comme nombre, vous devez convertir en utilisant parseInt () ou parseFloat ()

Modifier: oops. Correction de l'erreur comme mentionné dans le commentaire

-1
répondu David 2009-08-24 17:36:19