1554 votes

Comment convertir un nombre flottant en un nombre entier en JavaScript ?

J'aimerais convertir un flottant en un nombre entier en JavaScript. En fait, j'aimerais savoir comment effectuer les DEUX conversions standard : en tronquant et en arrondissant. Et de manière efficace, pas en convertissant en une chaîne de caractères et en l'analysant.

105 votes

Si vous ne le saviez pas, tous les nombres en javascript sont des flottants. De la spécification :

8 votes

4.3.20 Type de numéro : Le type Number est un ensemble de valeurs représentant des nombres. Dans l'ECMAScript, l'ensemble de valeurs représente les valeurs IEEE 754 en double précision sur 64 bits, y compris les valeurs spéciales "Not-a-Number" (NaN), l'infini positif et l'infini négatif.

13 votes

Oui, Javascript ne dispose pas d'un type "entier" distinct, mais il n'est pas rare de devoir effectuer cette conversion. Par exemple, dans mon application, les utilisateurs ont tapé un nombre (incluant éventuellement des centimes). Je devais tronquer les centimes et les afficher avec des virgules. L'étape 1 consistait à convertir en int.

42voto

Graeme Wicksted Points 381

Vous pouvez utiliser le parseInt pour ne pas arrondir. Soyez prudent avec l'entrée utilisateur en raison des options de préfixe 0x (hex) et 0 (oct).

var intValue = parseInt(floatValue, 10);

EDIT : en tant que avertissement (à partir de la section des commentaires), veuillez noter que certaines valeurs numériques seront converties sous leur forme d'exposant, par exemple 1e21 ce qui entraîne une représentation décimale incorrecte de "1"

19voto

Prasanth Points 4177

Décalage de bits par 0, ce qui équivaut à une division par 1.

// >> or >>>
2.0 >> 0; // 2
2.0 >>> 0; // 2

15voto

Russell Leggett Points 4562

Dans votre cas, lorsque vous voulez une chaîne de caractères à la fin (afin d'insérer des virgules), vous pouvez aussi simplement utiliser la fonction Number.toFixed() Toutefois, cette fonction permet d'effectuer des arrondis.

13voto

Une autre possibilité est d'utiliser l'opération XOR :

console.log(12.3 ^ 0); // 12
console.log("12.3" ^ 0); // 12
console.log(1.2 + 1.3 ^ 0); // 2
console.log(1.2 + 1.3 * 2 ^ 0); // 3
console.log(-1.2 ^ 0); // -1
console.log(-1.2 + 1 ^ 0); // 0
console.log(-1.2 - 1.3 ^ 0); // -2

La priorité des opérations sur les bits est inférieure à celle des opérations mathématiques, c'est utile. Essayez sur https://jsfiddle.net/au51uj3r/

10voto

Razor Points 2333

A tronqué :

// Math.trunc() is part of the ES6 spec
console.log(Math.trunc( 1.5 ));  // returns 1
console.log(Math.trunc( -1.5 )); // returns -1
// Math.floor( -1.5 ) would return -2, which is probably not what you wanted

A rond :

console.log(Math.round( 1.5 ));  // 2
console.log(Math.round( 1.49 )); // 1
console.log(Math.round( -1.6 )); // -2
console.log(Math.round( -1.3 )); // -1

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