809 votes

Comment vérifier qu'un nombre est un flottant ou un entier ?

Comment trouver qu'un nombre est float ou integer ?

1.25 --> float  
1 --> integer  
0 --> integer  
0.25 --> float

52 votes

Je comprends ce que vous demandez ici, mais juste pour être clair : <nit-pick> JavaScript n'a pas de types numériques différents pour les entiers et les flottants. Chaque nombre en JavaScript est simplement un Number . </nit-pick>

4 votes

Est Infinity une valeur entière ou non entière en ce qui vous concerne ? Les réponses sont assez bien réparties sur ce point.

13 votes

@MikeSamuel Pour être mathématiquement précis : puisque l'infini n'est pas un nombre réel et que tous les entiers sont des nombres réels, Infinity ne peut être considéré comme un nombre entier.

1417voto

kennebec Points 33886

vérifier s'il y a un reste lorsqu'on divise par 1 :

function isInt(n) {
   return n % 1 === 0;
}

Si vous ne savez pas que l'argument est un nombre, vous avez besoin de deux tests :

function isInt(n){
    return Number(n) === n && n % 1 === 0;
}

function isFloat(n){
    return Number(n) === n && n % 1 !== 0;
}

Mise à jour 2019 5 ans après que cette réponse ait été écrite, une solution a été normalisée dans ECMA script 2015. Cette solution est couverte dans cette réponse .

147 votes

Attention, cela retournera également vrai pour une chaîne vide, une chaîne représentant un nombre entier, true , false , null Un tableau vide, un tableau contenant un seul nombre entier, un tableau contenant une chaîne de caractères représentant un nombre entier, et peut-être plus encore.

0 votes

Je pense que votre première mise en œuvre est brillante et efficace et que la seconde est superflue. N'est-ce pas ?

4 votes

Juste pour noter, cette méthode fonctionnera dans la plupart des cas, mais il ne suffit pas de supposer que l'inverse (!isInt) implique un float. Essayez-le contre un très grand nombre - !isInt(Number.MAX_VALUE-0.1)- il ne fonctionnera pas. Ceci est dû à l'utilisation du modulo. Les méthodes dans la réponse ci-dessous sera fonctionnent dans tous les cas.

162voto

Dagg Nabbit Points 23918

Essayez ces fonctions pour vérifier si une valeur est une valeur primitive numérique qui n'a pas de partie fractionnaire et se situe dans les limites de taille de ce qui peut être représenté comme un nombre entier exact.

function isFloat(n) {
    return n === +n && n !== (n|0);
}

function isInteger(n) {
    return n === +n && n === (n|0);
}

6 votes

heh awesom exploit, c'est à peu près le mien ( n===+n pour vérifier le numérique, n|0 pour arrondir), mais avec des opérateurs intégrés. funky

7 votes

John Hartsock : une chaîne de caractères ne sera jamais une valeur numérique. C'est une chaîne de caractères. Le but de cette fonction est de tester si une valeur est une valeur numérique Javascript qui n'a pas de partie fractionnaire et qui est dans les limites de taille de ce qui peut être représenté comme un entier exact. Si vous voulez vérifier une chaîne de caractères pour voir si elle contient une séquence de caractères qui représente un nombre, vous appelleriez parseFloat() d'abord.

0 votes

@Pointy mais parseFloat("1.1a") retournera toujours 1.1. Supposons que vous ayez un champ de texte dont vous voulez valider qu'il s'agit d'un float et seulement d'un float sans caractères alpha. Test du temps d'un champ texte à partir d'un élément d'entrée pour decimal(float)

142voto

paperstreet7 Points 300

Il existe une méthode appelée Number.isInteger() qui est actuellement mis en œuvre dans tout sauf IE. MDN fournit également un polyfill pour les autres navigateurs :

Number.isInteger = Number.isInteger || function(value) {
  return typeof value === 'number' && 
    isFinite(value) && 
    Math.floor(value) === value;
};

Cependant, pour la plupart des cas, il est préférable d'utiliser Number.isSafeInteger qui vérifie également si la valeur est si élevée/basse que toute décimale aurait été perdue de toute façon. MDN a un polyfil pour cela aussi. (Vous avez également besoin du isInteger pollyfill ci-dessus).

if (!Number.MAX_SAFE_INTEGER) {
    Number.MAX_SAFE_INTEGER = 9007199254740991; // Math.pow(2, 53) - 1;
}
Number.isSafeInteger = Number.isSafeInteger || function (value) {
   return Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER;
};

0 votes

Cela fonctionne aussi dans mon Chrome et c'est probablement ce qu'il faut faire à l'avenir.

1 votes

À mon avis, la meilleure solution.

6 votes

Number.isInteger(12.0) //true (Chrome, février 17)

92voto

warfares Points 171

Pourquoi pas quelque chose comme ça :

var isInt = function(n) { return parseInt(n) === n };

0 votes

C'est en fait le cœur d'une bonne solution pour moi. J'avais besoin d'autoriser les entiers positifs et d'interdire les flottants, les chaînes de caractères et les entiers négatifs.

4 votes

Cela semble être une solution bien meilleure que les autres dans ce fil. La communauté pourrait-elle formuler des critiques, peut-être ?

6 votes

var y = 1.00 ; y === parseInt(y, 10) ; // cela renvoie vrai pour moi, ce qui n'est pas vraiment ce que nous voulons.

31voto

Marcio Simao Points 2039

Vous pouvez utiliser une simple expression régulière :

function isInt(value) {

    var er = /^-?[0-9]+$/;

    return er.test(value);
}

Vous pouvez également utiliser les fonctions ci-dessous, selon vos besoins. Elles sont développées par le Projet PHPJS .

is_int() => Vérifier si le type de la variable est un entier et si son contenu est un entier.

is_float() => Vérifier si le type de variable est float et si son contenu est float.

ctype_digit() => Vérifier si le type de variable est une chaîne de caractères et si son contenu ne comporte que des chiffres décimaux.

Mise à jour 1

Maintenant, il vérifie aussi les nombres négatifs, merci pour Commentaire de @ChrisBartley !

1 votes

Parfait pour tester de simples entiers non signés.

7 votes

Une doublure : /^[0-9]+$/.test(String(value))

0 votes

Une phrase plus courte et légèrement moins lisible : /^[0-9]+$/.test(''+value)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X