HOWTO · JavaScript

Convertir un nombre flottant en entier en JavaScript

Découvrez comment tronquer ou arrondir un Number JavaScript, analyser du texte décimal et éviter les raccourcis binaires risqués.

Sur cette page

JavaScript n’a pas de types distincts int et float; les deux sont normalement représentés par Number. Pour retirer la partie fractionnaire d’une valeur numérique, utilisez Math.trunc(), qui tronque vers zéro. Cette opération s’appelle la troncature vers zéro :

console.log(Math.trunc(12.75));
console.log(Math.trunc(-12.75));

Résultat :

12
-12

La méthode appropriée dépend du résultat recherché :

  • Utilisez Math.trunc(value) pour supprimer la partie fractionnaire vers zéro.
  • Utilisez Math.floor(value) ou Math.ceil(value) si le sens de l’arrondi compte.
  • Utilisez Math.round(value) pour choisir l’entier le plus proche.
  • Utilisez parseInt(text, 10) pour du texte décimal, pas par défaut pour tronquer un Number.

Tronquer un nombre avec Math.trunc()

Math.trunc() renvoie la partie entière sans arrondir. Pour une valeur positive, tout ce qui suit le point est supprimé. Pour une valeur négative, le résultat se rapproche de zéro : -12.75 devient -12, et non -13.

const value = -12.75;

console.log(Math.trunc(12.75));
console.log(Math.trunc(value));

Résultat :

12
-12

C’est généralement le choix le plus clair lorsque la valeur est déjà numérique et qu’il faut conserver sa partie entière. Une valeur entre -1 et 0 peut produire un zéro négatif :

console.log(Object.is(Math.trunc(-0.5), -0));

Résultat :

true

Si l’application doit distinguer -0 de 0, traitez ce cas explicitement.

Choisir floor(), ceil() ou round() pour arrondir

La troncature et l’arrondi sont différents. Math.floor() renvoie le plus grand entier inférieur ou égal à la valeur, tandis que Math.ceil() renvoie le plus petit entier supérieur ou égal. Cette différence compte surtout pour les valeurs négatives :

const value = -12.75;

console.log(Math.floor(value));
console.log(Math.ceil(value));
console.log(Math.round(-1.5));

Résultat :

-13
-12
-1

Utilisez Math.floor() comme borne inférieure, Math.ceil() comme borne supérieure et Math.round() pour l’entier le plus proche. En cas d’égalité, Math.round() va vers l’infini positif, d’où Math.round(-1.5) qui renvoie -1.

Analyser du texte décimal avec parseInt()

Lorsque la source est une chaîne, parseInt() peut en analyser le préfixe entier. Passez 10 comme base pour du texte décimal :

console.log(parseInt("12.75", 10));
console.log(Number.isNaN(parseInt("not a number", 10)));

Résultat :

12
true

parseInt() suit des règles d’analyse et peut s’arrêter devant un caractère invalide pour la base. Il diffère donc de la troncature d’un nombre existant. Par exemple, Math.trunc(Number("12.75")) convient si l’entrée doit d’abord être convertie et validée entièrement. Utilisez Number.isNaN() ou une autre validation si l’entrée peut être incorrecte.

Éviter toFixed() et les raccourcis binaires pour une conversion générale

Number.toFixed() est une méthode de formatage. Elle arrondit au nombre de décimales demandé et renvoie une chaîne ; ce n’est donc pas une méthode générale de conversion en entier :

console.log(typeof (12.75).toFixed(0));

Résultat :

string

Les expressions binaires comme value | 0, ~~value et value >> 0 tronquent aussi vers zéro, mais convertissent d’abord la valeur en entier signé sur 32 bits. Les valeurs hors de cette plage peuvent reboucler :

console.log(2 ** 31 | 0);

Résultat :

-2147483648

N’utilisez ces expressions que si une coercition signée en Int32 est volontaire. Elles ne sont ni plus sûres ni plus claires que Math.trunc().

Limites à garder à l’esprit

Number utilise une représentation flottante IEEE 754 en double précision. Les entiers ne sont exacts que jusqu’à Number.MAX_SAFE_INTEGER et Number.MIN_SAFE_INTEGER; utilisez Number.isSafeInteger() pour les calculs exacts et gérez explicitement les valeurs non finies :

console.log(Math.trunc(Infinity));
console.log(Math.trunc(NaN));

Résultat :

Infinity
NaN

Math.trunc() ne transforme pas Infinity, -Infinity ou NaN en entiers finis. Validez l’entrée si l’application exige un entier sûr et fini.

Résumé

Pour un nombre JavaScript existant, commencez par Math.trunc(value) si « entier » signifie retirer la partie fractionnaire vers zéro. Choisissez Math.floor(), Math.ceil() ou Math.round() selon la règle voulue. Utilisez parseInt(text, 10) pour le texte décimal, souvenez-vous que toFixed() produit du texte formaté et évitez les raccourcis binaires sans coercition signée sur 32 bits volontaire.