IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Formattage d'un nombre


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 23
    Points
    23
    Par défaut Formattage d'un nombre
    Bonjour,

    J'ai recherché sur tout le forum, et j'ai été vraiment étonné de ne trouver aucun sujet traitant de cela... pas un morceau de charAt ou quoique ce soit, un masque je sais pas, pour formatter rapidement et facilement un nombre...

    Je souhaite faire, en JS bien sûr, une fonction qui renvoie un nombre avec le séparateur de millier, mais pas simplement jusqu'a mille, plutôt jusqu'au milliard, et le problème, c'est que je n'ai pas trouvé de solution jusqu'alors. Le masque n'a pas marché, et je vois pas comment faire ce fichu charAt là.

    Si quelqu'un avait une petite idée pour me passer un coup de main, je lui en serais gré

    Merci d'avance et bonne soirée

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Il y a quelques années, j'avais fait ce truc qui peut certainement être amélioré, mais c'est une base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <title></title>
        <script type="text/javascript" src="formater.js"></script>
        <script type="text/javascript">
          <!--
          function trim(string)
          {
            return string.replace(/(^\s*)|(\s*$)/g,'');
          }
     
          function pad(obj, lg, caractere, sens) 
          { 
            while(obj.length < lg)
            {
              obj = (sens == "gauche") ? caractere + obj : obj + caractere;
            }        
            return obj;
          } 
     
        	function formater(valeur, nbDecim, sepDecim, sepMillier)
        	{
        		//-- cette fonction formate les valeurs numériques en fonction du nb décimales -------
        		//-- d'un séparateur décimal et d'un séparateur de milliers paramètrables ------------
        		//-- ex : 12.5 donnera 12.50 avec 2 décim. et 12.500 avec 3 --------------------------  
     
        		if ((valeur == "") || (sepDecim == "")) return;
        		if (nbDecim == "") nbDecim = 0;
     
            //-- suppression des espaces dans la valeur saisie -------------------------------
        		var aRemplacer = /\s/g;
        		var tmp = valeur.replace(aRemplacer, "");
            //-- si le séparateur de la valeur saisie = "," remplacement par "." ---------
        		var aRemplacer = /,/g;
        		var tmp = tmp.replace(aRemplacer, ".");
     
        		var arrondi = Math.pow(10, nbDecim);
        		var nombre = Math.round(tmp * arrondi, 0).toString();		
        		var debut = nombre.substr(0, (nombre.length - nbDecim));
        		var fin = nombre.substr(nombre.length - nbDecim);
        		if (sepMillier != "")
        		{
        		  if (debut.length % 3 != 0) 
        		  {
        		    var lg = debut.length + (3 -(debut.length % 3));
        		    debut = pad(debut, lg, " ", "gauche");
        		  }
              var tmp = "";
        		  for (var i = 0 ; i < lg ; i +=3)
        		  {
        		    tmp += debut.slice(i, 3 + i) + sepMillier;
        		  }
          		debut = trim(tmp);
        		}
        		var str_nombre = debut + sepDecim + fin;
        		document.test.sortie.value = str_nombre;
        	}
          //-->    
        </script>
      </head>
      <body onload="document.test.entree.focus();">
        <form name="test" id="test" method="post" action="">
          <table>
            <tr>
              <td>Nombre de décimales</td>
              <td>
                <input type="text" name="nbdecim" id="nbdecim" value="3" />
              </td>
            </tr>
            <tr>
              <td>Séparateur des décimales</td>
              <td>
                <input type="text" name="sepdecim" id="sepdecim" value="," />
              </td>
            </tr>
            <tr>
              <td>Séparateur des milliers</td>
              <td>
                <input type="text" name="sepmille" id="sepmille" value=" " />
              </td>
            </tr>
            <tr>
              <td>Valeur</td>
              <td>
                <input type="text" name="entree" id="entree" value="12 34 56 0.7894546" />
              </td>
            </tr>
            <tr>
            <tr>
              <td>Valeur arrondie</td>
              <td>
                <input type="text" name="sortie" id="sortie" style="tet-align:right" value="" />
              </td>
            </tr>
            <tr>
              <td>
                <input type="button" name="essai" id="essai" value="Tester" onclick="formater(this.form.entree.value, this.form.nbdecim.value, this.form.sepdecim.value, this.form.sepmille.value);"/>
              </td>
            </tr>
          </table>
        </form>
      </body>
    </html>

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 23
    Points
    23
    Par défaut
    Bonsoir,

    Merci d'avoir répondu. Personnellement, je trouve cette solution bien compliquée (déjà que je ne comprends pas pourquoi elle n'a pas été développée comme simple fonction, c'est pourtant utile).
    Quitte à y passer la soirée, je vais ré-essayer, et me débrouiller pour que ça marche. J'éditerais ce message pour la réponse.

    Bonne soirée

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 23
    Points
    23
    Par défaut
    Bonsoir ^^

    Après quelques recherches sur le net et quelques retouches, ça donne cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function number_format(valeur, separateur) {
    	var val = Math.floor(Math.abs(valeur));
    	var val_format=val+"";
    	var nb = val_format.length;
    	for (var i=1; i<4; i++) {
    		if (val >= Math.pow(10,(3*i))) {
    			val_format = val_format.substring(0,nb-(3*i)) + separateur + val_format.substring(nb-(3*i));
    		}
    	}
    	return val_format;
    }
    Merci du post au dessus, et bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [11g] Formattage d'un nombre
    Par voilalesoleil dans le forum PL/SQL
    Réponses: 8
    Dernier message: 07/10/2013, 14h04
  2. [Excel] Formattage des nombres avec PHPExcel !
    Par gentyjp dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 10/10/2007, 02h00
  3. Formattage de l'heure et du nombre décimal
    Par hmd01 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 25/02/2007, 17h14
  4. Formattage d'un nombre
    Par Seth77 dans le forum C#
    Réponses: 1
    Dernier message: 19/02/2007, 16h36
  5. Problème de formattage de nombres
    Par soso78 dans le forum Access
    Réponses: 2
    Dernier message: 29/06/2006, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo