Formater un nombre, façon number format de php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 29 823 fois - Téléchargée 28 fois

Contenu du snippet

Formate un nombre pour l'affichage (retourne une chaîne représentant un nombre formaté)
Permet de choisir le nombre de décimales, le signe precedent les decimales, le separateur de milliers
--------------------------------------
Exemples:
var monEntier = 1234567891011;
var monFlottant = 12345.1556;
monEntier.nombreFormate(); // 1 234 567 891 011.00
monFlottant.nombreFormate(3, ',', '`'); // 12`345,156
--------------------------------------
En esperant que ca pourra servir a qqn

Source / Exemple :


/*

  • +-------------------------------------+
  • Number.prototype.nombreFormate
  • +-------------------------------------+
  • Params (facultatifs):
  • - Int decimales: nombre de decimales (exemple: 2)
  • - String signe: le signe precedent les decimales (exemple: "," ou ".")
  • - String separateurMilliers: comme son nom l'indique
  • Returns:
  • - String chaine formatee
  • /
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); } _sRetour = separeMilliers(_sNombre.substr(0, _sNombre.indexOf('.')))+String(signe)+_sDecimales; } return _sRetour; }

A voir également

Ajouter un commentaire

Commentaires

cs_destiny
Messages postés
249
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
29 août 2011
-
Merci pour ce script qui fonctionne parfaitement !

J'essayais de le faire avec un regExp mais j'ai abandonné pour le tiens ;)
guitronic
Messages postés
4
Date d'inscription
jeudi 24 mars 2005
Statut
Membre
Dernière intervention
14 octobre 2009
-
jijedslenoir a raison il faut aussi rajouter son bout de code sinon il y a beug avec les décimals trop courts.

Sinon rien a dire, script au top je confirme ;)

www.guitronic.fr
soyd6391
Messages postés
1
Date d'inscription
vendredi 19 septembre 2008
Statut
Membre
Dernière intervention
26 mai 2009
-
Pour le commentaire ci dessus j'ai ajouté ce bout de code:

if(_sRetour.length == decimales + 1){
_sRetour ='0'+_sRetour;
}

Cet ajout est juste avant return _sRetour;

Ce script est top
cs_Chrigou
Messages postés
30
Date d'inscription
lundi 10 février 2003
Statut
Membre
Dernière intervention
27 juin 2008
-
Il y a encore un bug... mais je ne sais pas comment le corriger !
Exemple:
var a=0.07001;
document.write(a.nombreFormate(2, ':', ''));
n'affcihe pas 0.07 mais .7 pourquoi ?
jijedslenoir
Messages postés
9
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
1 octobre 2007
-
Il manque un traitement lorsqu'il y a une partie décimale d'une taille inférieure au nombre de décimale à retourner.
J'ajouterai, par exemple, le else suivant pour le 'if (sDecimalesTmp.length > decimales)':
} else {
_sDecimales = sDecimalesTmp;
for (i = sDecimalesTmp.length; i < decimales; i++) {
_sDecimales += "0";
}
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.