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

Contribuez Discussion :

formater un integer sur une longueur fixe


Sujet :

Contribuez

  1. #1
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut formater un integer sur une longueur fixe
    Une petite fonction marrante pour formater un integer sur x caractères avec des zéros devant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function zeroLead(num,long){
    return (long-(num.toString().length) >=0)?(num.toFixed(long-(num.toString().length )).toString().split('.').reverse().join('')):num;
    }
     
    alert(zeroLead(123,5))
    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 !

  2. #2
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Par contre je tombe sur une curiosité:

    si j'essaie de formater sur une longueur supérieure à 24 il me retourne une erreur ???
    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 !

  3. #3
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    ...
    toFixed()
    au dessus de 24 décimales on dépasse la capacité ...
    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 !

  4. #4
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function zeroLead(num,long){
    num = num.toString();
    while(num.split('').length<long){
        num = '0' + num;
    }
    return num;
    }
    alert(zeroLead(12,50))
    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

  5. #5
    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 : 73
    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 d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function zeroLead(num, long){
    	var n = long - num.toString().length;
     
    	return ((n >= 0) ? (num.toFixed(n)).toString().split('.').reverse().join('') : num);
    }
     
    alert(zeroLead(123, 35));

    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.)

  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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Sous IE un message d'erreur:

    Le nombre de fractions est en dehors de la plage
    Baignade interdite

    Cela provient bien de la imite du toFixed...

    Beef... oui bien entendu, j'ai déja proposé ce genre de script ... Je trouvais juste marrant de passer par le toFixed pour ajouter les zeros au lieu de boucler ...
    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 !

  7. #7
    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 : 73
    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
    Bonjour.

    En effet, je travaille toujours sous Firefox et j'oublie de tester les autres !

    • IE 8 = The number of fractional digits is out of range
    • Chrome 4 = Uncaught RangeError: toFixed() digits argument must be between 0 and 20


    Documentation Firefox :
    [...] this may be a value between 0 and 20, inclusive, and implementations may optionally support a larger range of values. If this argument is omitted, it is treated as 0.
    [Edit 11h40]

    Optimisation du code, victoire par KO !

    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
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8"/>
    	<meta name="Author" content="Daniel Hagnoul" />
    	<title>Page type</title>
    	<style>
    		body {
    			background-color:#dcdcdc;
    			color:#000000;
    			font-family:sans-serif;
    			font-size:medium;
    			font-style:normal;
    			font-weight:normal;
    			line-height:normal;
    			letter-spacing:normal;
    		}
    		h1,h2,h3,h4,h5 {
    			font-family:serif;
    		}
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {
    			margin:0px;
    			padding:0px;
    		}
    		p {
    			padding:6px;
    		}
    		ul,ol,dl {
    			list-style:none;
    			padding-left:6px;
    			padding-top:6px;
    		}
    		li {
    			padding-bottom:6px;
    		}
    		div#conteneur {
    			width:95%;
    			margin:12px auto;
    			padding:6px;
    			background-color:#FFFFFF;
    			color:#000000;
    			border:1px solid #666666;
    			font-size:0.8em;
    		}		
    		div#affiche {
    			margin:12px;
    			padding:6px;
    			border:1px solid #999999;
    			background-color:#FFFFFF;
    			color:#000000;
    		}
     
    		/* TEST */
    		pre {
    			font-family:sans-serif;
    			font-size:medium;
    		}
    	</style>
    	<script charset="CP-1252" src="../lib/jquery-1.4.2.min.js"></script>
    	<script>
    		$(function(){
     
    			// Bovino
    			function zeroLead1(num,long){
    				num = num.toString();
     
    				while(num.split('').length < long){
    					num = '0' + num;
    				}
     
    				return num;
    			}
     
    			// danielhagnoul
    			function zeroLead2(num, long){
    				var nb = num.toString();
    				var n = long - nb.length;
    				var tab = [];
     
    				if (n > -1){
    					for(var i = 0; i < n; i++){
    						tab.push("0");
    					}
    				}
     
    				tab.push(nb);
     
    				return tab.join("");
    			}
     
    			console.log(zeroLead1(1234567890, 5000));
    			console.log(zeroLead2(1234567890, 5000));
     
    		});
    	</script>
    </head>
    <body>
    	<div id="conteneur">
    		<h1>Victoire par KO !</h1>
    <pre>
    Firebug, essai n° 1 :
     
    zeroLead1	1	98.7%	1873.861ms	2102.859ms	2102.859ms	2102.859ms	2102.859ms
    zeroLead2	1	 0.1%	   1.909ms	   1.909ms	   1.909ms	   1.909ms	   1.909ms
     
    Firebug, essai n° 2 :
     
    zeroLead1	1	98.64%	1877.89ms	2102.357ms	2102.357ms	2102.357ms	2102.357ms	
    zeroLead2	1	 0.11%	   2.044ms	   2.044ms	   2.044ms	   2.044ms	   2.044ms	
    </pre>
    	</div>
    </body>  
    </html>
    [Edit 22 mars 2010 à 19h45]

    Optimisation finale, victoire (d'une courte tête) de while(n--) !
    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
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8"/>
    	<meta name="Author" content="Daniel Hagnoul" />
    	<title>Page type</title>
    	<style>
    		body {
    			background-color:#dcdcdc;
    			color:#000000;
    			font-family:sans-serif;
    			font-size:medium;
    			font-style:normal;
    			font-weight:normal;
    			line-height:normal;
    			letter-spacing:normal;
    		}
    		h1,h2,h3,h4,h5 {
    			font-family:serif;
    		}
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {
    			margin:0px;
    			padding:0px;
    		}
    		p {
    			padding:6px;
    		}
    		ul,ol,dl {
    			list-style:none;
    			padding-left:6px;
    			padding-top:6px;
    		}
    		li {
    			padding-bottom:6px;
    		}
    		div#conteneur {
    			width:95%;
    			margin:12px auto;
    			padding:6px;
    			background-color:#FFFFFF;
    			color:#000000;
    			border:1px solid #666666;
    			font-size:0.8em;
    		}		
    		div#affiche {
    			margin:12px;
    			padding:6px;
    			border:1px solid #999999;
    			background-color:#FFFFFF;
    			color:#000000;
    		}
     
    		/* TEST */
    		pre {
    			font-family:sans-serif;
    			font-size:medium;
    		}
    	</style>
    	<script charset="CP-1252" src="../lib/jquery-1.4.2.min.js"></script>
    	<script>
    		$(function(){
     
    			function zeroLead20(num, long){
    				var nb = num.toString();
    				var n = long - nb.length;
    				var tab = [];
     
    				for(var i = 0; i < n; i++){
    					tab.push("0");
    				}
     
    				tab.push(nb);
     
    				return tab.join("");
    			}
     
    			function zeroLead21(num, long){
    				var nb = num.toString();
    				var n = long - nb.length;
    				var tab = [];
     
    				while(n--){	// (n-- > 0) dans essai 1
    					tab.push("0");
    				}
     
    				tab.push(nb);
     
    				return tab.join("");
    			}
     
    			console.log(zeroLead20(1234567890, 20000).length);
    			console.log(zeroLead21(1234567890, 20000).length);
     
    		});
    	</script>
    </head>
    <body>
    	<div id="conteneur">
    		<h1>Victoire par KO !</h1>
    <pre>
    Firebug, avec while(n-- > 0) pour zeroLead21 :
     
    zeroLead20(1234567890, 20000)	1	27.99%	7.661ms	7.661ms	7.661ms	7.661ms	7.661ms	
    zeroLead21(1234567890, 20000)	1	27.84%	7.621ms	7.621ms	7.621ms	7.621ms	7.621ms
     
    Firebug, avec while(n--) pour zeroLead21 :
     
    zeroLead20	1	28.39%	7.603ms	7.603ms	7.603ms	7.603ms	7.603ms	
    zeroLead21	1	26.05%	6.975ms	6.975ms	6.975ms	6.975ms	6.975ms	
    </pre>
    	</div>
    </body>  
    </html>

    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.)

  8. #8
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    question de débutant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while(n--)
    {	// (n-- > 0) dans essai 1
         tab.push("0");
    }
    quelle est la condition de d'arrêt de la boucle while ?

  9. #9
    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 : 73
    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.

    Et bien, comme dans l'essai 1 : (n-- > 0).

    Je suis en faveur de toujours déclarer les conditions d'arrêt et de ne pas compter sur le comportement des navigateurs qui en principe pour n = 0, traduise false.

    Avec l'essai 2, je montre que l'absence de la déclaration d'arrêt est la seule chose qui favorise while() par rapport à for().

    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.)

  10. #10
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Auteur:

    0 = false
    1 = true ( et aussi tout ce qui est supérieur à 1 )
    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 !

Discussions similaires

  1. Mouvement du smartphone sur une surface fixe
    Par Medyo4zy dans le forum Android
    Réponses: 5
    Dernier message: 08/09/2012, 09h56
  2. Réponses: 0
    Dernier message: 27/07/2011, 11h43
  3. Formater un Integer sur 3 digits
    Par rodrigue62 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/01/2011, 16h25
  4. Réponses: 2
    Dernier message: 28/10/2010, 10h30
  5. Avis sur une config fixe
    Par sabotage dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 14/10/2008, 10h17

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