Fonction de formattage de nombre
Bonjour a tous, j'ai un petit probleme avec un script trouvé sur internet.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| Number.prototype.nombreFormate = function (decimales, signe, separateurMilliers)
{
var _sNombre = String(this), i, _sRetour = "", _sDecimales = "";
if (decimales == undefined) decimales = 2;
if (signe == undefined) signe = '.';
if (separateurMilliers == undefined) separateurMilliers = ' ';
function separeMilliers (sNombre) {
var sRetour = "";
while (sNombre.length % 3 != 0) {
sNombre = "0"+sNombre;
}
for (i = 0; i < sNombre.length; i += 3) {
if (i == sNombre.length-1) separateurMilliers = '';
sRetour += sNombre.substr(i, 3)+separateurMilliers;
}
while (sRetour.substr(0, 1) == "0") {
sRetour = sRetour.substr(1);
}
return sRetour.substr(0, sRetour.lastIndexOf(separateurMilliers));
}
if (_sNombre.indexOf('.') == -1) {
for (i = 0; i < decimales; i++) {
_sDecimales += "0";
}
_sRetour = separeMilliers(_sNombre)+signe+_sDecimales;
} else {
var sDecimalesTmp = (_sNombre.substr(_sNombre.indexOf('.')+1));
if (sDecimalesTmp.length > decimales) {
var nDecimalesManquantes = sDecimalesTmp.length - decimales;
var nDiv = 1;
for (i = 0; i < nDecimalesManquantes; i++) {
nDiv *= 10;
}
_sDecimales = Math.round(Number(sDecimalesTmp) / nDiv);
}else {
_sDecimales = sDecimalesTmp;
for (i = sDecimalesTmp.length; i < decimales; i++) {
_sDecimales += "0";
}
}
_sRetour = separeMilliers(_sNombre.substr(0, _sNombre.indexOf('.')))+String(signe)+_sDecimales;
}
return _sRetour;
} |
Ce script est sensé permettre de formatter un nombre comme on le souhaite.
Cependant, il manque un 0 dans le cas ou le nombre qu'on lui donne a un 0 directement après la virgule.Dans les autres cas, cela a l'air de fonctionner correctement.
Par exemple, pour 1485.0435, on obtient 1 485,435:
Code:
1 2 3 4
| essai = new Number()
essai = -1488.045323
essai = essai.nombreFormate(4, ",", " ")
alert(essai) |
Est ce que quelqu'un voit d'où vient l'erreur? Parceque j'ai beau modifier le script, pas moyen d'obtenir le bon résultat. J'ai vraiment besoin de vous sur ce coup la