Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1795 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Mettre un entier < 10 sur 2 digits

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mettre un entier < 10 sur 2 digits

n°1403140
zapan666
Tout est relatif
Posté le 09-07-2006 à 04:11:54  profilanswer
 

Salut,  
 
je me demande quel est le moyen le plus simple, le mieux, le plus rapide, bref, comment faire au mieux pour mettre un nombre sur deux digits (par exemple)
 
genre  

Code :
  1. 1


je veux que ça devienne

Code :
  1. 01


 
Le seul truc dont je suis sûr que ça marche :  

Code :
  1. if ($nb < 10 ) {
  2. $nb = "0"+$nb;
  3. }


(et je trouve que ça craint, surtout si on veux passer à plusieurs digits... [:theepsilon]  
 
 
Thx [:cupra]  


---------------
my flick r - Just Tab it !
mood
Publicité
Posté le 09-07-2006 à 04:11:54  profilanswer
 

n°1403145
Hermes le ​Messager
Breton Quiétiste
Posté le 09-07-2006 à 07:08:48  profilanswer
 

regarde du côté de printf (cf la doc) ;)

n°1403534
soulmanto
Chat Noir replica
Posté le 10-07-2006 à 09:26:14  profilanswer
 

str_pad :o  
 

Code :
  1. for ($compteur=0;$compteur < 10;$compteur++)
  2. {
  3. echo str_pad($compteur, 2, '0', STR_PAD_LEFT).'<br />';
  4. }


 
Manuel PHP > str_pad

n°1403538
AlphaZone
Posté le 10-07-2006 à 09:37:12  profilanswer
 

soulmanto a écrit :

str_pad :o  
 

Code :
  1. for ($compteur=0;$compteur < 10;$compteur++)
  2. {
  3. echo str_pad($compteur, 2, '0', STR_PAD_LEFT).'<br />';
  4. }


 
Manuel PHP > str_pad


Ce n'est pas étonnant qu'avec ça les débutants nous pondent des usines à gaz. En plus faire ca dans une boucle for. Décidement, on ne sera jamais au bout de nos peines.
 
Comme la très bien dit Hermes, il faut aller voir du côté de printf ou sprintf si l'on veut stocker ca dans une variable.
 
Exemple typique du printf :

Code :
  1. printf("%02d", $valeur);


Message édité par AlphaZone le 10-07-2006 à 09:41:41
n°1403539
soulmanto
Chat Noir replica
Posté le 10-07-2006 à 09:41:43  profilanswer
 

ah, le str_pad c'est plus usine à gaz que printf?

n°1403540
AlphaZone
Posté le 10-07-2006 à 09:42:50  profilanswer
 

non mais ton code OUI
 
Et pour ta gouverne, printf est à la base de la programmation en C.

n°1403542
soulmanto
Chat Noir replica
Posté le 10-07-2006 à 09:46:09  profilanswer
 

Mon code est juste un exemple d'affichage. Je connais le C, mais là on est en PHP, "pour ta gouverne"...

n°1403545
AlphaZone
Posté le 10-07-2006 à 09:50:28  profilanswer
 

Oui je suis d'accord on est en PHP mais ce n'est pas une raison pour pondre du code à la fois inutile et compliqué.

n°1403548
anapajari
s/travail/glanding on hfr/gs;
Posté le 10-07-2006 à 09:57:18  profilanswer
 

AlphaZone a écrit :

mais ce n'est pas une raison pour pondre du code à la fois inutile et compliqué.


Je vois pas trop en quoi son code est une uzine à gaz ....
Il fait juste une boucle for pour montrer le fonctionnement de str_pad de 0 à 10. Ce n'est ni inutile ni compliqué.  
La ligne de "formatage" est aussi longue avec sprintf ou avec str_pad[:spamafote]
 
Quand à l'utilisation de sprintf VS str_pad, les deux fonctionnent très bien, mais ne font pas exactement la même chose...  
Je pense même que str_pad est plus rapide, mais on s'en fout un peu de gagner 3ms vu que sprintf est "conceptuellement" plus adapté.


Message édité par anapajari le 10-07-2006 à 09:58:12
n°1403549
Hermes le ​Messager
Breton Quiétiste
Posté le 10-07-2006 à 09:58:24  profilanswer
 

soulmanto a écrit :

Mon code est juste un exemple d'affichage. Je connais le C, mais là on est en PHP, "pour ta gouverne"...


 
Le problème avec ton code, c'est que c'est surtout le mauvais type qui est renvoyé : une chaine alors que lui veut un nombre. Même si en PHP ça ne change effectivement rien (et on peut le regretter), ma solution est quand même bcp plus propre (et églement sans doute plus optimisée --> pas testé). str_pad ne sert pas à ça à la base même s'il peut être utilisé comme ça. [:spamafote]

mood
Publicité
Posté le 10-07-2006 à 09:58:24  profilanswer
 

n°1403553
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-07-2006 à 10:00:49  profilanswer
 

AlphaZone a écrit :

non mais ton code OUI
 
Et pour ta gouverne, printf est à la base de la programmation en C.


1/ Dans la demande de zapan666, y'a une boucle, donc je ne vois pas pourquoi ce serait usine à gaz que de remettre cette même boucle. C'est toi qui répond à côté de la plaque
2.1/ La base de la programmation en C, c'est pas printf (qui demande un include) mais cout, qui est une instruction de base.
2.2/ Le PHP, c'est pas du C hein
2.3/ Et t'as l'air super malin le jour où, au lieu d'afficher le résultat, tu veux le stocker dans un fichier, bdd ou autre variable de session... Avec le str_pad, qui est (a) on ne peut plus propre, (b) rigoureusement dédié à ce que demande zapan666, (c) fortement explicite, donc lisible et maintenable
 
Donc bref, moi ce que j'en dis...

n°1403554
anapajari
s/travail/glanding on hfr/gs;
Posté le 10-07-2006 à 10:01:31  profilanswer
 

Hermes le Messager a écrit :

Le problème avec ton code, c'est que c'est surtout le mauvais type qui est renvoyé : une chaine alors que lui veut un nombre. Même si en PHP ça ne change effectivement rien (et on peut le regretter), ma solution est quand même bcp plus propre (et églement sans doute plus optimisée --> pas testé). str_pad ne sert pas à ça à la base même s'il peut être utilisé comme ça. [:spamafote]


Sprintf renvoie une chaine aussi hein ;)
En fait dans ta phrase on peut remplacer str_pad par sprintf partout :o
 

n°1403556
Hermes le ​Messager
Breton Quiétiste
Posté le 10-07-2006 à 10:04:15  profilanswer
 

anapajari a écrit :

Sprintf renvoie une chaine aussi hein ;)
En fait dans ta phrase on peut remplacer str_pad par sprintf partout :o


 
mwoué peut-être finalement... :/ Faut dire que j'ai fait aussi du C étant bcp plus jeune, c'est pour ça... Je sais pas moi, ça me choque de rajouter des 0 comme ça... [:spamafote] ça doit être psychologique...  :D  

n°1403558
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-07-2006 à 10:07:11  profilanswer
 

Hermes le Messager a écrit :

Le problème avec ton code, c'est que c'est surtout le mauvais type qui est renvoyé : une chaine alors que lui veut un nombre. Même si en PHP ça ne change effectivement rien (et on peut le regretter), ma solution est quand même bcp plus propre (et églement sans doute plus optimisée --> pas testé). str_pad ne sert pas à ça à la base même s'il peut être utilisé comme ça. [:spamafote]


Chuis pas d'accord : en comptant que les librairies du PHP sont bien écrites (rien n'est moins sûr) le printf est censé utiliser en interne le str_pad, de toute façon. Ensuite, représenter "un nombre" avec le 0 facultatif, y'a un souci quelque part. Une représentation de n'importe quelle variable, c'est forcément sous forme de chaîne (ou à la limite, array de bytes, si on fait une image). Un integer, ça n'a pas de représentation "visuelle". Déjà, rien que la base peut varier... Alors la représentation.
Deplus, le printf(), "retourne" dans tous les cas un str, je ne vois pas ce qu'il pourrait retourner d'autre... Il sert justement à rediriger vers la sortie standard des variables, selon un formattage précisé dans un pattern. Rien que la notion de formattage selon un pattern, ça induit une string.
 
Pour en revenir au problème de départ, en plus je ne suis pas vraiment sur que le printf retourne quoi que ce soit... A moins de rediriger la sortie standard vers un stream en mémoire, et aller le relire, je ne vois pas comment tu veux récupérer une valeur de retour...

n°1403560
Hermes le ​Messager
Breton Quiétiste
Posté le 10-07-2006 à 10:08:32  profilanswer
 

Arjuna a écrit :


Deplus, le printf(), "retourne" dans tous les cas un str, je ne vois pas ce qu'il pourrait retourner d'autre... Il sert justement à rediriger vers la sortie standard des variables, selon un formattage précisé dans un pattern. Rien que la notion de formattage selon un pattern, ça induit une string.


 
Oué, t'as raison pour ça, aucun doute, j'ai oublié de réfléchir sur ce coup. :/

n°1403561
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-07-2006 à 10:11:51  profilanswer
 

C'est pas grave ;)
 
Dans tous les cas, le coup du printf() est de toute façon une bonne solution aussi.
 
Genre si demain il veut une représentation de la sorte :
 
a,aaa,aaa.aa
 
Ben avec des str_pad, il est pas sorti, alors qu'avec un printf ça marche tout seul ;)
 
moi j'intervenais juste pour dire que dans ce cas précis, str_pad était tout aussi intelligent, puisqu'il ne formatte pas réellement le nombre, il veut juste forcer le nombre de caractères sur lequelle il est représenté. Dans ce cas, str_pad est mieu adapté, car je suis convaincu que c'est plus rapide, et surtout, c'est dédié, donc aucune confusion possible (parceque si on se sert d'un printf() pour récupérer une variable, moi je vais direct chercher du bois et je prépare un bûcher ;))

n°1403570
AlphaZone
Posté le 10-07-2006 à 10:25:47  profilanswer
 

Arjuna a écrit :

1/ Dans la demande de zapan666, y'a une boucle, donc je ne vois pas pourquoi ce serait usine à gaz que de remettre cette même boucle. C'est toi qui répond à côté de la plaque


Mouai, si tu veux...
 

Arjuna a écrit :


2.1/ La base de la programmation en C, c'est pas printf (qui demande un include) mais cout, qui est une instruction de base.


Ah bon et depuis quand ?
Etant bête et discipliné, on m'a toujours appris "cout" pour le C++
 

Arjuna a écrit :

2.2/ Le PHP, c'est pas du C hein


Je viens d'apprendre quelque chose. Heureusement que tu étais là !
 

Arjuna a écrit :

2.3/ Et t'as l'air super malin le jour où, au lieu d'afficher le résultat, tu veux le stocker dans un fichier, bdd ou autre variable de session...


Bah toi aussi, parce que c'est pas avec str_pad que tu en feras autant ^^
Et puis il y a sprintf pour renvoyer dans une varaible. Et fprintf pour renvoyer dans un fichier.
 

Arjuna a écrit :

Avec le str_pad, qui est (a) on ne peut plus propre, (b) rigoureusement dédié à ce que demande zapan666, (c) fortement explicite, donc lisible et maintenable


Je ne te souhaite pas de devenir programmeur.
 

Arjuna a écrit :

Donc bref, moi ce que j'en dis...


Enfin pour ce que j'en dis ;)

Message cité 1 fois
Message édité par AlphaZone le 10-07-2006 à 10:30:02
n°1403571
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-07-2006 à 10:27:44  profilanswer
 

de toute façon, on s'en fout, j'ai raison quand même :fuck:

n°1403581
anapajari
s/travail/glanding on hfr/gs;
Posté le 10-07-2006 à 10:37:15  profilanswer
 

Arjuna a écrit :

Genre si demain il veut une représentation de la sorte :
 
a,aaa,aaa.aa
Ben avec des str_pad, il est pas sorti, alors qu'avec un printf ça marche tout seul ;)


Oui mais la tu as quand même number_format qu'est plus fait pour ça :o

n°1403588
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-07-2006 à 10:40:40  profilanswer
 

ça c'est que s'il veut un formatage complèxe ;)
 
non, je suis 100% d'accord avec toi pour le number_format, qui est infiniement mieux que le printf() et est encore plus dédié que le str_pad(), donc la solution utime au problème :)
 
mais moi je la connais pas cette fonction, je fais pas de php :spamafote:
 
en C# c'est plus simple : tu dérives le type "byte" en "TowDigitsNumber", et tu surcharges le "ToString()" et zou :D Comme ça dedans tu fais la tambouille que tu veux, personne ne sait ce que tu y fais de toute façon ;)


Message édité par Arjuna le 10-07-2006 à 10:41:30
n°1403592
zapan666
Tout est relatif
Posté le 10-07-2006 à 10:42:39  profilanswer
 

euh, c'est moi ou vous etes parti completement en live ?
 
 
str_pad, printf et sprintf c'est pile poil ce que je voulais, merci
 
Pour votre boucle : je vois pas ou j'ai demande une boucle.
str_pad n'est pas une usine a gas, c'est pareil pour moi que sprintf et co.
et non, je ne voulais pas un nombre mais une chaine de caractere.
Mais....de par ce fait, la question se pose :  
 
Donc apparament, printf et co renvoit une chaine de caractere.
Mais si je veux passer de 2 en base 10, a 2 en base 8 (donc 02) ?
 
...je repond moi meme :

Code :
  1. octdec()
  2. decoct()


 
Merci


---------------
my flick r - Just Tab it !
n°1403603
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-07-2006 à 10:55:28  profilanswer
 

AlphaZone a écrit :

Bah toi aussi, parce que c'est pas avec str_pad que tu en feras autant ^^
Et puis il y a sprintf pour renvoyer dans une varaible. Et fprintf pour renvoyer dans un fichier.


Super la généricité du code quoi...
Moi je bosse dans des variables jusqu'au moment ultime ou je dois faire quelquechose de ma variable.
Toi, tu préfères décider ce que tu vas faire de ta variable avant de la traîter...
 
Super l'optimisation et la lisibilité.
 
Donc :
tu décide de transformer "1" en "01". tu veux l'afficher à l'écran pour montrer que tu l'as bien fait.
tu veux le stocker en base de données, puisque c'est pour ça que tu fais le traîtement.
et enfin, pour garder une trace, tu mets aussi en log...
 
moi je fais un str_pad (ou format number) sur ma variable, puis je lance un appel pour chaque sortie (écran, fichier, bdd).
 
Toi, tu préfères faire un appel par sortie, sâchant que c'est cet appel qui va faire le traîtement.. Donc tu fais 3 fois la même chose. Bravo.
Et je ne parle pas de ce que ça donne le jour où tu veux passer de 2 chars à 10 chars... Moi j'ai un appel à une fonction à modifier. Toi, t'as 3 patterns à retrouver (pas forcément groupés en plus) et à modifier.
 
Et tu oses me dire ça ?
 

AlphaZone a écrit :

Je ne te souhaite pas de devenir programmeur.


 
:o


Message édité par Arjuna le 10-07-2006 à 10:55:49
n°1403645
AlphaZone
Posté le 10-07-2006 à 11:24:02  profilanswer
 

Ecoute je ne suis pas la pour critiquer ta façon de travailler encore moin de la connaitre. Tu code comme tu veux, et moi pareil.
 
Sur ce, bonne journée.
 
A bon entendeur

n°1403688
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-07-2006 à 12:02:57  profilanswer
 

jamais dis le contraire, ça y est, il est énervé :o
 
c'est toi qui veut pas que le fasse programmeur (pis d'abors, je suis pas programmeur, je suis cp/expert erp/developpeur/architect d'app, mais pas programmeur :p

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Mettre un entier < 10 sur 2 digits

 

Sujets relatifs
[Flash] aide mettre des boutons dans une imagemettre du js en fichier externe
HTML - mettre une image de fond une seule fois[php/sql] mettre en archives données quand date dépassé
Mettre un tableau dans une hash ?[RESOLU] Mettre un Objet comme attribut d'un autre Objet
Mettre un fichier en download[SQL] Problème => Récupérer RefDossierMax (non entier)
mettre une feuille excel à la fin d'un classeurMettre du XML dans du HTML et utiliser un XSL
Plus de sujets relatifs à : Mettre un entier < 10 sur 2 digits


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR