292 votes

Comment convertir une chaîne de devise en un double avec Javascript ?

J'ai une zone de texte qui aura un devise Je dois ensuite convertir cette chaîne en un double pour effectuer des opérations sur cette chaîne.

"$1,100.00" 1100.00

Cela doit se faire du côté client. Je n'ai pas d'autre choix que de laisser le devise en tant que devise une chaîne de caractères en entrée, mais vous devez la convertir en un double pour permettre certaines opérations mathématiques.

579voto

CMS Points 315406

Supprimez tous les chiffres qui ne sont pas des points :

var currency = "-$4,400.50";
var number = Number(currency.replace(/[^0-9.-]+/g,""));

6 votes

Il semble que cela ne fonctionne que lorsqu'il y a un .00 traînante. Autrement, les représentations valides de la monnaie telles que "1100 $" et "1100 $." seront réduites de deux ordres de grandeur.

33 votes

Gardez à l'esprit que cela dépend de la région, car d'autres régions utilisent ',' pour les décimales (par exemple 1.100,00€). Certaines autres régions utilisent même un nombre standard différent de chiffres par groupe (comme 3 décimales).

10 votes

Pour gérer les nombres négatifs dans la chaîne, j'ai ajouté un '-' à la liste des caractères à accepter, c'est-à-dire .replace(/[^0-9- \. ]+/g, "")

28voto

Thomas Kremmel Points 4100

comptabilité.js est la voie à suivre. Je l'ai utilisé pour un projet et j'ai eu une très bonne expérience.

accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99
accounting.unformat("€ 1.000.000,00", ","); // 1000000

Vous pouvez le trouver à l'adresse suivante GitHub

17 votes

Mise à jour : Cette bibliothèque a 71 problèmes ouverts et n'a pas été éditée depuis 5 mois, donc je ne lui fais pas confiance. github.com/openexchangerates/accounting.js/issues

0 votes

Mise à jour : n'a pas été modifié depuis 4 ans.

24voto

Jamie Points 1062

Utilisez une regex pour supprimer le formatage (dollar et virgule), et utilisez parseFloat pour convertir la chaîne en un nombre à virgule flottante.``

var currency = "$1,100.00";
currency.replace(/[$,]+/g,"");
var result = parseFloat(currency) + .05;

10 votes

Il convient de noter que vous ne devriez pas utiliser le flottant pour des applications autres que "Toy" lorsque vous ajoutez de la monnaie. Vous vous retrouverez avec no les totaux exacts.

7 votes

Vous serez surpris et mécontent lorsque parseFloat("151.20" * 100) vous donnera 15119.999999999998 mais que parseFloat("151.40" * 100) vous donnera 15140. N'utilisez jamais parseFloat pour l'argent. Utilisez des bibliothèques spécifiques pour traiter l'argent, comme accounting.js ou n'importe laquelle des autres bibliothèques suggérées ici.

4 votes

Ce qui est + .05 pour ?

20voto

Phill Points 7558

Je sais que c'est une vieille question mais je voulais donner une option supplémentaire.

Le jQuery Globalize donne la possibilité d'analyser un format spécifique à une culture vers un flotteur.

https://github.com/jquery/globalize

Étant donné une chaîne "$13,042.00", et Globalize set à en-US :

Globalize.culture("en-US");

Vous pouvez analyser la valeur flottante de la manière suivante :

var result = Globalize.parseFloat(Globalize.format("$13,042.00", "c"));

Cela vous donnera :

13042.00

Et vous permet de travailler avec d'autres cultures.

3voto

IEnumerator Points 1420

Je sais que vous avez trouvé une solution à votre question, je voulais juste vous recommander de regarder le plugin jQuery suivant, plus complet, pour les formats de chiffres internationaux :

Formateur de numéros internationaux

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