84 votes

convertir une chaîne de caractères en nombre node.js

J'essaie de convertir req.params en Number car c'est ce que j'ai défini dans mon schéma pour le paramètre year.

J'ai essayé

req.params.year = parseInt( req.params.year, 10 );  

et

Number( req.params.year);

et

1*req.params.year;

mais aucune ne fonctionne. Dois-je installer quelque chose ?

0 votes

Je suis désolé, je n'ai pas vu le reste du code que vous avez posté. Alors essayez parseInt(req.params.year.replace(/[^0-9]/g, ''),10)

0 votes

0 votes

Pouvez-vous consigner req.params.year et me faire savoir ce que vous obtenez.

153voto

Tusk Points 779

Vous n'avez pas besoin d'installer quelque chose.

parseInt(req.params.year, 10);

devrait fonctionner correctement.

console.log(typeof parseInt(req.params.year)); // returns 'number'

Quel est votre résultat, si vous utilisez parseInt ? est-ce toujours une chaîne de caractères ?

5 votes

Je pense que vous utilisez Express, n'est-ce pas ? Je n'ai jamais utilisé ce package, mais se pourrait-il que les paramètres soient en lecture seule ? Et si vous créez votre propre variable ? var p = parseInt(req.params.year);

0 votes

Quelle est la différence ? Pourquoi cela fonctionne-t-il de cette manière ? Désolé, je suis en train d'apprendre nodejs donc je suis curieux.

4 votes

@Sang ng Il n'y a pas de différence. La variable req.params est créée par le paquet express et elle est en lecture seule. Vous devez donc déclarer votre propre variable en lecture-écriture.

13voto

tejp124 Points 1

L'utilisation de parseInt() est une mauvaise idée, principalement parce qu'elle n'échoue jamais. De plus, certains résultats peuvent être inattendus, comme dans le cas de INFINITY.
Vous trouverez ci-dessous la fonction permettant de gérer les comportements inattendus.

function cleanInt(x) {
    x = Number(x);
    return x >= 0 ? Math.floor(x) : Math.ceil(x);
}

Voir les résultats des tests ci-dessous.

console.log("CleanInt: ", cleanInt('xyz'), " ParseInt: ", parseInt('xyz'));
console.log("CleanInt: ", cleanInt('123abc'), " ParseInt: ", parseInt('123abc'));
console.log("CleanInt: ", cleanInt('234'), " ParseInt: ", parseInt('234'));
console.log("CleanInt: ", cleanInt('-679'), " ParseInt: ", parseInt('-679'));
console.log("CleanInt: ", cleanInt('897.0998'), " ParseInt: ", parseInt('897.0998'));
console.log("CleanInt: ", cleanInt('Infinity'), " ParseInt: ", parseInt('Infinity'));

résultat :

CleanInt:  NaN  ParseInt:  NaN
CleanInt:  NaN  ParseInt:  123
CleanInt:  234  ParseInt:  234
CleanInt:  -679  ParseInt:  -679
CleanInt:  897  ParseInt:  897
CleanInt:  Infinity  ParseInt:  NaN

0 votes

Ce n'est pas tout à fait correct. parseInt('123abc')) lance une erreur, il ne valide pas le nombre 123.

0 votes

Je ne suis pas sûr de votre environnement. J'ai donné un résultat basé sur la version de nœud v10.2.1.

0 votes

Sur le nœud 13.8 parseInt('123abc') -> 123

3voto

Werlious Points 13

Une réponse incomplète Ok, ceci est juste pour compléter les informations sur parseInt, qui sont toujours très valables. Express ne permet pas du tout de modifier les objets req ou res (immuables). Donc si vous voulez modifier/utiliser ces données efficacement, vous devez les copier dans une autre variable (var year = req.params.year).

1voto

Alchemist Points 43

Il existe plusieurs façons d'analyser une chaîne de caractères pour en faire un nombre.

- Number()

- parseInt()

- parseFloat()

Exemple :

Number("256.123") //returns 256.123

Number("252px") //returns NaN

parseInt("256.123") //returns 256

parseInt("256px") //returns 256

parseFloat("256") //returns 256

parseFloat("256.123") //returns 256.123

parseFloat("256.23px") //returns 256.23

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