Je travaille avec l'extrait suivant et le résultat final est un nombre comme 349
. Comment le formater pour qu'il soit $349.00
? Je pensais que formatNumber()
fonctionnerait? Qu'est-ce que je fais mal? Le javascript effectue une série de calculs et présente ensuite le total net, les taxes et le total. Pour le total net et la taxe, j'aimerais un dollar et deux décimales.
Réponses
Trop de publicités?La nouvelle ECMAScript l'Internationalisation de l'API offre un numberformat fonction.
- http://www.ecma-international.org/ecma-402/1.0/
- https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/NumberFormat
À l'aide de l'API pour ce faire:
// Create our number formatter.
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2,
});
alert(formatter.format(349)); /* $349.00 */
Comme cette spécification est relativement nouveau, j'ai compilé quelques informations sur la prise en charge du navigateur:
- IE soutient depuis IE11
- Bureau FF prend en charge depuis v27
- Mobile FF tous les soirs (v30) ne le supporte pas encore.
- Chrome prend en charge
- Il y a une cale d'appui sur les navigateurs plus anciens, mais je ne l'ai pas testé.
Voici le meilleur formateur js money que j'ai vu:
Number.prototype.formatMoney = function(decPlaces, thouSeparator, decSeparator) {
var n = this,
decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces,
decSeparator = decSeparator == undefined ? "." : decSeparator,
thouSeparator = thouSeparator == undefined ? "," : thouSeparator,
sign = n < 0 ? "-" : "",
i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + "",
j = (j = i.length) > 3 ? j % 3 : 0;
return sign + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : "");
};
Il a été reformaté et emprunté à partir d'ici: http://stackoverflow.com/a/149099/751484
Vous devrez fournir votre propre code de devise (vous avez utilisé $ ci-dessus).
Appelez-le comme ceci (bien que notez que les arguments par défaut sont 2, une virgule et un point, vous n'avez donc pas besoin de fournir d'arguments si tel est votre préférence):
var myMoney=3543.75873;
var formattedMoney = '$' + myMoney.formatMoney(2,',','.'); // "$3,543.76"
+1 à Jonathan M pour avoir fourni la méthode originale. Etant donné qu’il s’agit explicitement d’un formateur de devise, j’ai ajouté le symbole monétaire («$» par défaut) à la sortie et ajouté une virgule par défaut comme séparateur de milliers. Si vous ne voulez pas réellement de symbole monétaire (ou de séparateur de milliers), utilisez simplement "" (chaîne vide) comme argument.
Number.prototype.formatMoney = function(decPlaces, thouSeparator, decSeparator, currencySymbol) {
// check the args and supply defaults:
decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces;
decSeparator = decSeparator == undefined ? "." : decSeparator;
thouSeparator = thouSeparator == undefined ? "," : thouSeparator;
currencySymbol = currencySymbol == undefined ? "$" : currencySymbol;
var n = this,
sign = n < 0 ? "-" : "",
i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + "",
j = (j = i.length) > 3 ? j % 3 : 0;
return sign + currencySymbol + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : "");
};