Les différentes implémentations d'ECMAScript, disposent de méthodes commme toLocaleString() qui devraient permettre un affichage formaté des nombres. Malheureusement, seules les versions récentes des navigateurs supportent ces méthodes, et renvoient quelquefois un résultat qui n'est pas celui escompté...
Voici un script qui permet d'obtenir un format de nombre
modulable. La solution retenue est d'ajouter une méthode aux
objets javascript Number et String. Ainsi l'utilisation est
des plus simples : objet.decim()
.
Il est possible de donner deux arguments à la méthode d'abord
le nombre de décimales (par défaut 2) puis le séparateur
(point ou virgule, par défaut le point). On peut appeler la
méthode ainsi objet.decim(3)
ou encore
objet.decim(2,",")
. Si on indique un séparateur
autre que le point, ce sera la virgule !
Si le premier argument est négatif, on arrondira à la puissance de dix correspondant à la valeur absolue de cet argument. Ainsi 1234.decim(-2) arrondira le nombre 1234 à la centaine (100 = 10 puissance 2) la plus proche, soit 1200.
Il existe une méthode de l'objet Number à partir de
JavaScript 1.5 et JScript 5, toFixed() qui permet
d'obtenir un nombre arrondi au nombre de décimales
souhaitées, mais elle n'est pas implémentée dans Netscape
avant les versions 6, et possède un effet due la
représentation interne des nombres. Par exemple,
0.045.toFixed(2) --> "0.04"
avec certaines
implémentations d'ECMAScript. Si vous souhaitez vérifier ce
comportement sur votre navigateur,
cliquez ici.
Entrez un nombre avec plusieurs chiffres après le séparateur décimal (ce séparateur pourra être un point ou une virgule)
Vous l'obtiendrez soit en regardant le code source de la page, soit en le lisant plus bas, soit encore en le téléchargeant sous forme de fichier javascript externe.
<script type="text/javascript"> /*La fonction decim renvoie la valeur d'un nombre nb arrondie à d décimales avec, comme séparateur, un point ou une virgule. Elle accepte en entrée un nombre éventuellement décimal avec . ou , en séparateur (mais sans séparateur de milliers). La fonction peut être appelée ainsi : n.decim() --> renvoie un nombre à 2 décimales avec . n.decim(d) --> le nombre arrondie à d décimales . sép. n.decim(d,",") --> idem précédent avec , sép. La fonction retourne null si le nombre de décimales d est décimal ou si d n'est pas numérique. Si d est négatif, elle arrondit le nombre à la puissance -d de 10. Elle retourne NaN si une valeur donnée de n n'est pas numérique ou convertible en nombre par javascript (on peut entrer des nombres en notation scientifique et n peut être négatif). La fonction est ajouté au prototype des nombres et des chaînes. Elle s'utilise comme une méthode des variables - ou des constantes - de type numérique ou chaîne.*/ function decim(d,v) { var sign=false, nb=this; nb=nb.toString(); if(!d && d!=0)d=2; if(d!=parseInt(d))return null; d=parseInt(d); v=(!v || v==".")?".":","; nb=nb.replace(/,/,"."); nb=parseFloat(nb); if(isNaN(nb))return NaN; nb=Math.round(nb*Math.pow(10,d)) if(nb<0){sign=true;nb=-nb} nb=nb.toString(); while (nb.length<=d) nb="0"+nb; if(d>0){ var re="("; while(re.length<=d)re+="."; re+="$)" re=new RegExp(re); nb=nb.replace(re,v+"$1"); } else if(nb!="0")while(d++<0)nb+="0"; if(sign)nb="-"+nb; return nb; } // Ajout aux prototypes des objets String et Number Number.prototype.decim=decim; String.prototype.decim=decim; </script>