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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 61
    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
    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);

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 61
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    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
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 61
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    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>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

+ 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