J'ai vu this format function référencé sur plusieurs sites, mais aucun d'entre eux n'a un exemple explicite de comment passer un nombre dans la fonction. J'ai essayé '12345'.format (' 0.00 ') qui je crois est comment il devrait être écrit, mais il me donne l'erreur que l'objet ne supporte pas la propriété ou la méthode. J'ai également essayé Number ('12345'). Format ('0.00'); var num = '12345' // num.format ('0.00'); format ('0.00', '12345') et ont même essayé d'utiliser des nombres à la place des chaînes 12345.format (0.00). Est-ce que je manque quelque chose de vraiment évident ici?Passage en nombre, Number.prototype.format
Copie de la fonction incluse pour référence afin que vous n'ayez pas à vous rendre sur le site (avec toutes les pièces manquantes remplies).
/**
* I ♥ Google
*/
String.prototype.stripNonNumeric = function() {
var str = this + '';
var rgx = /^\d|\.|-$/;
var out = '';
for(var i = 0; i < str.length; i++) {
if(rgx.test(str.charAt(i))) {
if(!((str.charAt(i) == '.' && out.indexOf('.') != -1) ||
(str.charAt(i) == '-' && out.length != 0))) {
out += str.charAt(i);
}
}
}
return out;
};
/**
* Formats the number according to the 'format' string; adherses to the american number standard where a comma is inserted after every 3 digits.
* note: there should be only 1 contiguous number in the format, where a number consists of digits, period, and commas
* any other characters can be wrapped around this number, including '$', '%', or text
* examples (123456.789):
* '0' - (123456) show only digits, no precision
* '0.00' - (123456.78) show only digits, 2 precision
* '0.0000' - (123456.7890) show only digits, 4 precision
* '0,000' - (123,456) show comma and digits, no precision
* '0,000.00' - (123,456.78) show comma and digits, 2 precision
* '0,0.00' - (123,456.78) shortcut method, show comma and digits, 2 precision
*
* @method format
* @param format {string} the way you would like to format this text
* @return {string} the formatted number
* @public
*/
Number.prototype.format = function(format) {
if (!(typeof format == "string")) {return '';} // sanity check
var hasComma = -1 < format.indexOf(','),
psplit = format.stripNonNumeric().split('.'),
that = this;
// compute precision
if (1 < psplit.length) {
// fix number precision
that = that.toFixed(psplit[1].length);
}
// error: too many periods
else if (2 < psplit.length) {
throw('NumberFormatException: invalid format, formats should have no more than 1 period: ' + format);
}
// remove precision
else {
that = that.toFixed(0);
}
// get the string now that precision is correct
var fnum = that.toString();
// format has comma, then compute commas
if (hasComma) {
// remove precision for computation
psplit = fnum.split('.');
var cnum = psplit[0],
parr = [],
j = cnum.length,
m = Math.floor(j/3),
n = cnum.length % 3 || 3; // n cannot be ZERO or causes infinite loop
// break the number into chunks of 3 digits; first chunk may be less than 3
for (var i = 0; i < j; i += n) {
if (i != 0) {n = 3;}
parr[parr.length] = cnum.substr(i, n);
m -= 1;
}
// put chunks back together, separated by comma
fnum = parr.join(',');
// add the precision back in
if (psplit[1]) {fnum += '.' + psplit[1];}
}
// replace the number portion of the format with fnum
return format.replace(/[\d,?\.?]+/, fnum);
};
En fait, vous n'avez pas besoin d'inclure le nombre entre parenthèses - il suffit de laisser un espace entre le nombre et le point. De cette façon, l'interprète ne prend pas le point comme séparateur de fractions mais comme un pointeur. '42 .format ('0.00')' – Andris
Oui, mais je ne l'aime pas :) Voir la question ci-jointe - http://stackoverflow.com/questions/2726590/call-methods-on-native-javascript-types -without-wrapping-with pour plus de détails à ce sujet. – Anurag
J'ai remarqué que c'était incomplet après l'avoir revu. Je ne comprends pas comment tant de gens sur le réseau ont prétendu que cela a fonctionné pour eux ... mais de toute façon, vous avez répondu à ma question principale très clairement. Merci! Dommage que je n'arrive pas à faire fonctionner la fonction. – Choy