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 :

séparateur des milles


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Par défaut séparateur des milles
    Bonjour,
    J'ai un formulaire qui est un convertisseur pour prêt immobilier.

    J'aimerais pouvour formater les nombres pour qu'ils séparent les milles ex:
    10'000 ou 100'000 ou comme ca si c'est plus facile 100 000.

    voici le code de ma page merci d'avance pour votre aide. là je sèche

    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
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    <script language='JavaScript'>
    <!--------------------------------------------------------------------
        Memory  = "0";      // initialise memory variable
        Current = "0";      //   and value of Display ("current" value)
        Operation = 0;      // Records code for eg * / etc.
        MAXLENGTH = 30;     // maximum number of digits before decimal!
     
    function gup( name )
    {
      name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
      var regexS = "[\\?&]"+name+"=([^&#]*)";
      var regex = new RegExp( regexS );
      var results = regex.exec( window.location.href );
      if( results == null )
        return "";
      else
        return results[1];
    }
     
    function insertNthChar(string,chr,nth) {
      var output = '';
      for (var i=0; i<string.length; i++) {
        if (i>0 && i%4 == 0)
          output += chr;
        output += string.charAt(i);
      }
     
      return output;
    }
     
     
    function Calculate() { 
      Current = document.Calculator.Bien.value;
      Current = eval(((Current * 0.8)*0.0725)/0.33)
      Operation = 0;
      Current = Current + "";
      if (Current.indexOf("Infinity") != -1) {
        Current = "Valeur trop grande";
      };
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      Operation = 0;                //clear operation
      Memory    = "0";              //clear memory
      Current = Math.round(Current);
      document.Calculator.Salaire.value = Current;
    }
     
    function Calculate2() { 
      Current = document.Calculator.Salaire.value;
      Current = eval((((Current/3)/0.0725)/0.8)*1)
      Operation = 0;
      Current = Current + "";
      if (Current.indexOf("Infinity") != -1) {
        Current = "Valeur trop grande";
      };
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      Operation = 0;                //clear operation
      Memory    = "0";              //clear memory
      Current = Math.round(Current);
      document.Calculator.Bien.value = Current;
    }
     
    function FixCurrent() {
      Current = document.Calculator.Salaire.value;
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      document.Calculator.Salaire.value = Current;
    }
     
    function FixCurrent2() {
      Current = document.Calculator.Bien.value;
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      document.Calculator.Bien.value = Current;
     
    }
     
    //--------------------------------------------------------------->
    </script>
     
    </head>
     
    <body>
     
    <form name="Calculator">
    <table width="398" id="calcul">
    <tbody>
    <tr>
      <td width="6">&nbsp;</td>
    <td width="163">Salaire brut annuel:</td>
    <td width="16">&nbsp;</td>
    <td width="193">Prix du bien:</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
    <td><input name="Salaire" type="text" class="contactform" size="20" maxlength="40" />
    </td>
    <td>&nbsp;</td>
    <td><input class="contactform" maxlength="40" name="Bien" size="20" type="text" />
    </td>
    </tr>
    <tr>
      <td>&nbsp;</td>
    <td><input onclick="Calculate2()" name="result" type="button" value=" Calcul prix du bien " /></td>
    <td>&nbsp;</td>
    <td><input onclick="Calculate()" name="result2" type="button" value=" Calcul du salaire " /></td>
    </tr>
    </tbody>
    </table>
    </form>

  2. #2
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    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
    /* string : $number_format(number $nombre [,string $separateur [,number $longueur]]) */
    function number_format(nombre,separateur,longueur){
    	/* default values */ 
    	separateur = separateur || ",";
    	longueur = longueur || 3;
    	/* variables */
    	var string = nombre.toString(), newString;
    	/* split string */
    	newString = string.substr(Math.max(string.length-longueur,0),longueur);
    	while(string = string.substr(0,string.length-longueur)){
    		newString = string.substr(Math.max(string.length-longueur,0),longueur) + separateur + newString;
    	}
    	/* return new string */
    	return newString;
    }
    /* example */
    alert(number_format(1234567890)); // 1,234,567,890
    alert(number_format(1234567890,'#',4)); // 12#3456#7890

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    Bonsoir,
    sur base d'une regExp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function formatMillier( nombre){
      nombre += '';
      var sep = ' ';
      var reg = /(\d+)(\d{3})/;
      while( reg.test( nombre)) {
        nombre = nombre.replace( reg, '$1' +sep +'$2');
      }
      return nombre;
    }
    alert( formatMillier( 100001));

  4. #4
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut hors-sujet utile : refactorisation
    tout est dans le titre ^^

    Exemple d'une seule fonction pour remplacer les jumelles FixCurrent et FixCurrent2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function FixCurrent(param) {
      Current = document.Calculator[param].value;
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      document.Calculator[param].value = Current;
    }
    ...pour les fonctions Calculate et Calculate2 : même punition

    SInon à part ça, ne pas oublier que "eval is evil" !
    SURTOUT quand il n'est là que pour ...l'ambiance ^^
    La preuve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval((((Current/3)/0.0725)/0.8)*1) == ((((Current/3)/0.0725)/0.8)*1)// true ^^

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Par défaut
    J'ai réussi à formater en utilisant une méthode trouvée sur un autre forum :

    Mais maintenant mon problème c'est que l'espace est compté et le calcul ne ce fait plu. (je tappe 100 000.00 et résultat est NaN)

    voici le code:

    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
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans nom</title>
     
     
     
    <script language='JavaScript'>
    <!--------------------------------------------------------------------
        Memory  = "0";      // initialise memory variable
        Current = "0";      //   and value of Display ("current" value)
        Operation = 0;      // Records code for eg * / etc.
        MAXLENGTH = 30;     // maximum number of digits before decimal!
     
     
    function gup( name )
    {
      name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
      var regexS = "[\\?&]"+name+"=([^&#]*)";
      var regex = new RegExp( regexS );
      var results = regex.exec( window.location.href );
      if( results == null )
        return "";
      else
        return results[1];
    }
     
    function insertNthChar(string,chr,nth) {
      var output = '';
      for (var i=0; i<string.length; i++) {
        if (i>0 && i%4 == 0)
          output += chr;
        output += string.charAt(i);
      }
     
      return output;
    }
     
     
    function Calculate() { 
      Current = document.Calculator.Bien.value;
      Current = eval(((Current * 0.8)*0.0725)/0.33)
      Operation = 0;
      Current = Current + "";
      if (Current.indexOf("Infinity") != -1) {
        Current = "Valeur trop grande";
      };
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      Operation = 0;                //clear operation
      Memory    = "0";              //clear memory
      Current = Math.round(Current);
      document.Calculator.Salaire.value = Current;
    }
     
    function Calculate2() { 
      Current = document.Calculator.Salaire.value;
      Current = eval((((Current/3)/0.0725)/0.8)*1)
      Operation = 0;
      Current = Current + "";
      if (Current.indexOf("Infinity") != -1) {
        Current = "Valeur trop grande";
      };
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      Operation = 0;                //clear operation
      Memory    = "0";              //clear memory
      Current = Math.round(Current);
      document.Calculator.Bien.value = Current;
    }
     
    function FixCurrent(param) {
      Current = document.Calculator[param].value;
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      document.Calculator[param].value = Current;
    }
     
     
    </script>
    <script language="JavaScript1.2" src="masks.js"></script>
    <script language="JavaScript1.2">
    // Mask JavaScript API (v0.3) - dswitzer [chez] pengoworks [point] com - iubito [chez] asp-php [point] net
    function init()
    {
     
       // Création du masque montant en euro
       oEuroMask = new Mask("#_###.00", "number");
       // Associer le oDateMask aux 2 champs
     
       // Associer le oEuroMask au champ
       oEuroMask.attach(document.Calculator.Salaire);
         oEuroMask.attach(document.Calculator.Bien);
    }
     
    </script> 
     
    </head>
     
    <body onload="init();">
    <form name="Calculator">
    <table width="398" id="calcul">
    <tbody>
    <tr>
      <td width="6">&nbsp;</td>
    <td width="163">Salaire brut annuel:</td>
    <td width="16">&nbsp;</td>
    <td width="193">Prix du bien:</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
    <td><input name="Salaire" type="text" class="contactform" size="20" maxlength="40" />
    </td>
    <td>&nbsp;</td>
    <td><input class="contactform" maxlength="40" name="Bien" size="20" type="text" />
    </td>
    </tr>
    <tr>
      <td>&nbsp;</td>
    <td><input onclick="Calculate2()" name="result" type="button" value=" Calcul prix du bien " /></td>
    <td>&nbsp;</td>
    <td><input onclick="Calculate()" name="result2" type="button" value=" Calcul du salaire " /></td>
    </tr>
    </tbody>
    </table>
    </form>
     
    </body>
    </html>

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Beaucoup de choses à redire sur ton code...

    <script language="JavaScript1.2">
    Je t'invite à te renseigner un peu sur l'attribut language de la balise script.
    Il sert à fixer la version de JavaScript à utiliser et est donc particulièrement inutile alors que l'attribut type, lui, est obligatoire !
    Se méfier des codes trouvés on ne sait où sur le net et souvent obsolète.
    A titre d'analogie, cette syntaxe serait similaire à obliger tes visiteurs à utiliser Internet Explorer 4 (version qui implémente JavaScript 1.2)... Pourquoi pas un message d'alerte "Attention : votre navigateur est beaucoup trop récent !"

    Tes variables Operation et Memory ont au moins le mérite d'être jolies, faure d'être utilisées

    Current = eval((((Current/3)/0.0725)/0.8)*1)Oh non !!!
    Ceci dit, pour aller avec le *1, il ne manquerait pas un petit +0 à la fin ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Current = Current + "";
      if (Current.indexOf("Infinity") != -1) {
        Current = "Valeur trop grande";
      };
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      Current = Math.round(Current);
    Il existe les méthodes isFinite() et isNaN() pour tester ça... Ah, quoique, peut-être pas avec JavaScript 1.2
    Ensuite, pourquoi transtyper en chaine si c'est pour ensuite retranstyper en nombre (implicite dans Math.round()) ?

    Concernant ton problème initial, pourquoi réinventer la roue et ne pas utiliser Number.toLocaleString() ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var nombre = 3500.15;  
    alert(nombre.toLocaleString());


    Enfin, pour retrouver ensuite le bon nombre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var nombre = '3 500,15';
    nombre = nombre.replace(/\s/g, '').replace(/,/, '.');
    Souviens toi quand même d'une chose : ne pas copier coller aveuglément des codes sans se demander s'ils sont vraiment à jour et optimisés...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Par défaut
    Bonjour et merci de prendre du temp pour moi.
    Tu me donnes pas mal de pistes, mais le je suis complètement perdu.
    Est-ce que tu pourais me donner un coup de main?
    Je laisse tombé ce code et repart avec le script d'origine.

    celui-là.
    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
    <script language='JavaScript'>
    <!--------------------------------------------------------------------
        Memory  = "0";      // initialise memory variable
        Current = "0";      //   and value of Display ("current" value)
        Operation = 0;      // Records code for eg * / etc.
        MAXLENGTH = 30;     // maximum number of digits before decimal!
     
     
    function gup( name )
    {
      name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
      var regexS = "[\\?&]"+name+"=([^&#]*)";
      var regex = new RegExp( regexS );
      var results = regex.exec( window.location.href );
      if( results == null )
        return "";
      else
        return results[1];
    }
     
    function insertNthChar(string,chr,nth) {
      var output = '';
      for (var i=0; i<string.length; i++) {
        if (i>0 && i%4 == 0)
          output += chr;
        output += string.charAt(i);
      }
     
      return output;
    }
     
     
    function Calculate() { 
      Current = document.Calculator.Bien.value;
      Current = eval(((Current * 0.8)*0.0725)/0.33)
      Operation = 0;
      Current = Current + "";
      if (Current.indexOf("Infinity") != -1) {
        Current = "Valeur trop grande";
      };
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      Operation = 0;                //clear operation
      Memory    = "0";              //clear memory
      Current = Math.round(Current);
      document.Calculator.Salaire.value = Current;
    }
     
    function Calculate2() { 
      Current = document.Calculator.Salaire.value;
      Current = eval((((Current/3)/0.0725)/0.8)*1+0)
      Operation = 0;
      Current = Current + "";
      if (Current.indexOf("Infinity") != -1) {
        Current = "Valeur trop grande";
      };
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      Operation = 0;                //clear operation
      Memory    = "0";              //clear memory
      Current = Math.round(Current);
      document.Calculator.Bien.value = Current;
    }
     
    function FixCurrent(param) {
      Current = document.Calculator[param].value;
      if (Current.indexOf("NaN") != -1) {
        Current = "Valeur incorrecte";
      };
      document.Calculator[param].value = Current;
    }
     
     
    </script>
    </head>
     
    <body>
    <form name="Calculator">
      <table width="398" id="calcul">
        <tbody>
          <tr>
            <td width="6">&nbsp;</td>
            <td width="163">Salaire brut annuel:</td>
            <td width="16">&nbsp;</td>
            <td width="193">Prix du bien:</td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td><input name="Salaire" type="text" class="contactform" size="20" maxlength="40" /></td>
            <td>&nbsp;</td>
            <td><input class="contactform" maxlength="40" name="Bien" size="20" type="text" /></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td><input onclick="Calculate2()" name="result" type="button" value=" Calcul prix du bien " /></td>
            <td>&nbsp;</td>
            <td><input onclick="Calculate()" name="result2" type="button" value=" Calcul du salaire " /></td>
          </tr>
        </tbody>
      </table>
    </form>
    </body>
    </html>
    J'ai essayé sans le Current = Math.round(Current); mais mon résultat n'est plus arondi il y a une virgule

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

Discussions similaires

  1. Publipostage et séparateur des milliers
    Par Tchock dans le forum Word
    Réponses: 6
    Dernier message: 19/06/2008, 10h33
  2. Séparateur des milliers
    Par Tchupacabra dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2007, 10h24
  3. Réponses: 3
    Dernier message: 28/04/2007, 15h07
  4. Récupérer le séparateur des décimales
    Par Dadou74 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 09/02/2007, 12h00
  5. Séparateurs des milliers
    Par blowlagoon dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/05/2006, 10h02

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