2009-08-24 6 views
25

Comment puis-je tester une variable pour déterminer si elle contient un nombre et si c'est un nombre entier?Comment détecter si un nombre donné est un nombre entier?

par exemple.

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

Des indices?

+0

double possible de [Comment vérifier si une variable est un entier Javascript?] (Http:// stackoverflow.com/questions/14636536/comment-vérifier-si-une-variable-est-un-entier-en-javascript) –

Répondre

50
num % 1 === 0 

Cela va convertir num pour taper Number premier, de sorte que toute valeur qui peut être converti en un nombre entier passeront le test (par exemple '42', true).

Si vous voulez exclure ceux-ci, vérifiez plus pour

typeof num === 'number' 

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

parseInt(num) == num 

pour un contrôle typées et

parseInt(num) === num 

pour un contrôle typé.

Notez que les tests ne sont pas équivalents: La vérification via parseInt() est d'abord convertie en String, par exemple, true ne passera pas la vérification.

Notez également que le chèque typées via parseInt() traitera correctement les chaînes hexadécimaux, mais échouera pour octal (ie les chaînes numériques avec zéro) que ceux-ci sont reconnus par parseInt() mais pas par Number(). Si vous devez gérer des chaînes décimales avec des zéros en tête, vous devez spécifier l'argument radix.

+0

Celui-ci le fait, merci. – jirkap

-1

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

Si vous souhaitez utiliser val comme un nombre, vous devez jeter à l'aide parseInt() ou parseFloat()

EDIT: oups . Correction de l'erreur comme mentionné dans le commentaire

+1

Juste à partir du nom de la fonction, je pense que "isNaN" retournera vrai si val "est * Not * un nombre", ce qui correspond à NaN. Faute de frappe? –

+1

isNaN (val) renvoie true si val n'est pas un nombre, mais retourne false pour les nombres non entiers, donc cela ne résoudra pas le problème. – Amok

2

Que diriez-vous ceci:

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

Cela ne fonctionnera pas car 8.000 est toujours un nombre entier. –

+1

Cela dépend probablement de votre définition (et cas d'utilisation) de l'entier – bdukes

+0

Hmm. Vrai. Pour des questions intrinsèquement mathématiques, j'ai tendance à les considérer en termes de nombres et non de chiffres - d'où mon commentaire ci-dessus. –

0

vous pouvez soit utiliser Javas d'analyse syntaxique des capacités ou bien essayer l'opérateur modulo% ...

2

Serait-ce fonctionne pas:

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

Vous devez toujours inclure le paramètre radix: parseInt (nombre, 10) – Greg

+0

Oups, oui. Je l'ai réparé. – paracycle

+0

@Greg: pas nécessairement - on pourrait vouloir passer des hexadécimaux; les octals échoueront car ils sont reconnus par 'parseInt()' mais pas par 'Number()' – Christoph

6

Quelqu'un a déjà done it for you.

+0

Comme dit @Greg ci-dessus (http://stackoverflow.com/questions/1323314/detecting-if-a-given-number- is-an-integer # comment-1157013), ceci devrait inclure le paramètre radix à parseInt. – bdukes

9

Cela fonctionne:

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

Cela a l'avantage de fonctionner si x est 'false'; –

4

Vous pouvez utiliser la définition formelle du nombre entier:

Math.floor(x) === x 
Questions connexes