Comment formater des nombres en utilisant JavaScript?

Je souhaite formater le numéro à l'aide de javascript comme ci-dessous:

10.00=10,00 1,000.00=1.000,00 

Chaque navigateur supporte Number.prototype.toLocaleString() , une méthode destinée à renvoyer une chaîne localisée à partir d'un nombre. Toutefois, la spécification la définit comme suit:

Produit une valeur de chaîne qui représente la valeur du numéro formé selon les conventions de la zone locale actuelle de l'environnement hôte. Cette fonction dépend de l' implémentation , et il est permis, mais pas encouragé, de retourner la même chose que pour toString .

Dépendant de la mise en œuvre signifie qu'il appartient au fournisseur de savoir comment le résultat se ressemblera et entraînera des problèmes d'interopérabilité.

Internet Explorer (IE 5.5 à IE 9) est le plus proche de ce que vous voulez et forme le numéro dans un style de devise – séparateur de milliers et fixé à 2 décimales.

Firefox (2+) forme le nombre avec un millier de séparateurs et de décimales, mais seulement si applicable.

Opera, Chrome et Safari sont les mêmes que pour toString() – sans séparateur de milliers, décimale uniquement si nécessaire.

Solution

Je suis venu avec le code suivant (basé sur une ancienne réponse à moi ) pour essayer de normaliser les résultats pour fonctionner comme la méthode d'Internet Explorer:

 (function (old) { var dec = 0.12 .toLocaleString().charAt(1), tho = dec === "." ? "," : "."; if (1000 .toLocaleString() !== "1,000.00") { Number.prototype.toLocaleString = function () { var neg = this < 0, f = this.toFixed(2).slice(+neg); return (neg ? "-" : "") + f.slice(0,-3).replace(/(?=(?!^)(?:\d{3})+(?!\d))/g, tho) + dec + f.slice(-2); } } })(Number.prototype.toLocaleString); 

Cela utilisera la localisation intégrée du navigateur si elle est disponible, tout en dégradant gracieusement les paramètres par défaut du navigateur dans les autres cas.

Démonstration de travail: http://jsfiddle.net/R4DKn/49/

Je connais cette solution en utilisant NumberFormat mais il est nécessaire de convertir les valeurs en chaîne. https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/NumberFormat

 // Remove commas number = "10,000.00".replace(/,/g, ''); // Create a NumberFormat type object var formatter = new Intl.NumberFormat('de-DE', { minimumFractionDigits: 2 }); // Apply format console.log(formatter.format(number)); output:10.000,00 

Javascript ne fournit pas cette fonctionnalité elle-même, mais il existe un certain nombre de fonctions tierces qui peuvent faire ce que vous voulez.

Notez, quelle que soit la méthode que vous utilisez, vous devez faire attention à utiliser uniquement la chaîne résultante à des fins d'affichage – ce ne sera pas une valeur de numéro valide dans Javascript après avoir converti le point décimal en une virgule.

La solution la plus rapide que je puisse offrir est d'utiliser la fonction number_format() écrite par les personnes phpJS. Ils ont implémenté des versions Javascript d'une charge de fonctions PHP couramment utilisées, y compris number_format() , et cette fonction fera exactement ce que vous voulez.

Voir le lien ici: http://phpjs.org/functions/number_format

Je ne me dérangerait pas de prendre toute la bibliothèque phpJS (beaucoup d'entre elles sont d'une valeur douteuse de toute façon), mais saisissez la fonction de 20 lignes impaires montrée sur la page ci-dessus et collez-la dans votre application.

Si vous voulez une solution plus souple, il existe un certain nombre de fonctions JS autour desquelles on simule la fonction printf() de C. Il existe déjà une bonne question sur SO qui couvre ceci. Voir ici: JavaScript équivalent à printf / string.format

J'espère que cela pourra aider.