2407 votes

Comment convertir une chaîne en un nombre entier en JavaScript ?

Comment convertir une chaîne de caractères en un nombre entier en JavaScript ?

Est-il possible de le faire automatiquement, ou dois-je écrire un sous-programme pour le faire manuellement ?

2895voto

Nosredna Points 33670

parseInt ou unaire plus ou même parseFloat avec plancher ou Math.round

parseInt :

var x = parseInt("1000",10); // you want to use radix
    // of 10 so you get a decimal number even with a leading 0

unaire plus si votre chaîne est déjà sous la forme d'un nombre entier :

var x = +"1000";

si votre chaîne est ou pourrait être un float et que vous voulez un integer :

var x = Math.floor("1000.01"); //floor automatically converts string to number

ou, si vous devez utiliser Math.floor plusieurs fois :

var floor = Math.floor;
var x = floor("1000.01");

Si vous êtes du genre à oublier d'indiquer le radix lorsque vous appelez parseInt, vous pouvez utiliser parseFloat et arrondir comme vous le souhaitez. Ici, j'utilise floor.

var floor = Math.floor;
var x = floor(parseFloat("1000.01"));

Il est intéressant de noter que Math.round (comme Math.floor) effectue une conversion de chaîne de caractères en nombre, donc si vous voulez que le nombre soit arrondi (ou si vous avez un nombre entier dans la chaîne de caractères), c'est un excellent moyen, peut-être mon préféré :

var round = Math.round;
var x = round("1000"); //equivalent to round("1000",0)

On ne le voit pas souvent. valueOf est surtout utilisé en interne, selon le W3C.

var x = "1000".valueOf();

290voto

Zanoni Points 8401

Essayez la fonction parseInt :

var number = parseInt("10");

Mais il y a un problème. Si vous essayez de convertir "010" à l'aide de la fonction parseInt, elle le détecte comme un nombre octal et renvoie le nombre 8. Vous devez donc spécifier un radix (de 2 à 36). Dans ce cas, la base 10.

parseInt(string, radix)

Exemple :

var result = parseInt("010", 10) == 10; // Returns true

var result = parseInt("010") == 10; // Returns false

57voto

Dalius I Points 437

ParseInt() et + sont différents

parseInt("10.3456") // returns 10

+"10.3456" // returns 10.3456

38voto

SolutionYogi Points 16697

Essayez parseInt.

var number = parseInt("10", 10); //number will have value of 10.

30voto

Ian Ooi Points 604

J'ai posté la mauvaise réponse ici, désolé. corrigé.

C'est une vieille question, mais j'adore cette astuce :

~~"2.123"; //2
~~"5"; //5

Le double bit négatif élimine tout ce qui se trouve après la virgule et le convertit en un format numérique. On m'a dit que c'était légèrement plus rapide que d'appeler des fonctions et autres, mais je ne suis pas entièrement convaincu.

EDIT : Une autre méthode que je viens de voir ici (une question sur l'opérateur javascript >>>, qui est un décalage à droite de zéro) qui montre que le décalage d'un nombre par 0 avec cet opérateur convertit le nombre en un uint32 ce qui est bien si vous le voulez aussi non signé . Là encore, cela se convertit en un entier non signé ce qui peut entraîner des comportements étranges si vous utilisez un nombre signé.

"-2.123" >>> 0; // 4294967294
"2.123" >>> 0; // 2
"-5" >>> 0; // 4294967291
"5" >>> 0; // 5

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