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 :

Fonction de formattage de nombre


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 61
    Points : 56
    Points
    56
    Par défaut Fonction de formattage de nombre
    Bonjour a tous, j'ai un petit probleme avec un script trouvé sur internet.
    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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Je ne vois pas de problème !

    Essayer ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var n = -1488.045323;
    var s = n.nombreFormate(9,',','.');
    /* decimales : 9, signe : la virgule, separateurMilliers : le point */
    alert(s);

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 61
    Points : 56
    Points
    56
    Par défaut
    Cela fonctionne avec le code que vous venez de passer. Mais je ne comprend toujours pas d'où vient l'erreur?
    Par contre j'obtiens un nombre avec beaucoup de chiffres après la virgule mais à la limite, je peux l'arrondir ensuite, c'est pas très génant même si à la base c'était le but de la fonction


    edit:
    A bah non, les fonction Math ne peuvent s'appliquer, car avec le separateur des milliers, les nombres sont mal interprétés.
    Par exemple 2 356,25 est interprété 2
    et 2,356.25 est interprété 2,356
    Y'a t'il un autre moyen??

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    parser la valeur saisie pour la convertir en nombre et n'appliquer le formattage que pour l'affichage

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 61
    Points : 56
    Points
    56
    Par défaut
    Oui, c'est ce que je fais, mais j'obtiens pour l'affichage un nombre avec x 0 à la fin, et comme c'est un string, pas moyen de faire un arrondi ou autre chose. J'essaye de remplacer les caractères avec replace() mais pas moyen, ca ne veut rien savoir...

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    un petit bout de code que j'avais en stcok qui peut te donner une piste
    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
     
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>Nouvelle page 1</title>
    <script type='text/javascript'>
     
    function formatte(valeur){
     
    if (isNaN(valeur.split(' ').join(''))){alert('numérique svp');
                       return false;}
     
    var valeurformate =new Array()
    var tempval=valeur.split('.')
    valeur=tempval[0].split(' ').join('')
    valeur=valeur.split('').reverse() 
     
    var i=0
    while(i<valeur.length){
     
     valeurformate.push( (valeur[i+2]?valeur[i+2]:'') + (valeur[i+1]?valeur[i+1]:'') + valeur[i] );
     i=i+3;
    }
     
    valeurformate=valeurformate.reverse().join(' ') +( tempval[1]?tempval[1].length>0?'.'+tempval[1]:'':'');
    document.getElementById('moninput').value=valeurformate
    }
    </script>
     
    </head>
     
    <body>
    <input id="moninput" type='text' onblur='formatte(this.value)' />
     
    </body>
    </html>

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 61
    Points : 56
    Points
    56
    Par défaut
    Voila ma fonction permettant d'afficher le nombre avec un alert.
    Cependant, j'obtiens "-1 435,350000000-1 435,35"
    une idée??
    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
    function aff_nb(nb)
    {
                nb = parseFloat(nb)
                nb = Math.round(nb*100)/100
                var s = nb.nombreFormate(9,',',' ');
                var bool = 0
                res = ""
                for(i=0; i< s.length;i++){
                    if(s.charAt(i)==",")
                        {   
                            for(j=0 ;j< i+3; j++){
                                res = res + s.charAt(j)
                            }
                            bool = 1
                        }
                     if(bool == 0)
                         {
                             res = s
                         }
                }
                alert(res)
    }
    edit: C'est bon, c'étais une bétise de ma part, il suffit de sortir le dernier if de la boucle for...

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

Discussions similaires

  1. Fonction de conversion de nombre en lettres
    Par david_chardonnet dans le forum Langage
    Réponses: 21
    Dernier message: 08/12/2021, 17h51
  2. [VB.NET] Fonction pour arrondir uin nombre...
    Par Aspic dans le forum VB.NET
    Réponses: 3
    Dernier message: 27/12/2005, 00h13
  3. fonction pour compter le nombre de checkbox coché ?
    Par Death83 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/09/2005, 11h28
  4. [VB6]fonction inverse de Hex (nombres hexadécimaux)
    Par Guigui_ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2002, 19h31

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