Mettre un entier < 10 sur 2 digits

Mettre un entier < 10 sur 2 digits - PHP - Programmation

Marsh Posté le 09-07-2006 à 04:11:54    

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 !
Reply

Marsh Posté le 09-07-2006 à 04:11:54   

Reply

Marsh Posté le 09-07-2006 à 07:08:48    

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

Reply

Marsh Posté le 10-07-2006 à 09:26:14    

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

Reply

Marsh Posté le 10-07-2006 à 09:37:12    

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
Reply

Marsh Posté le 10-07-2006 à 09:41:43    

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

Reply

Marsh Posté le 10-07-2006 à 09:42:50    

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

Reply

Marsh Posté le 10-07-2006 à 09:46:09    

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

Reply

Marsh Posté le 10-07-2006 à 09:50:28    

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

Reply

Marsh Posté le 10-07-2006 à 09:57:18    

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
Reply

Marsh Posté le 10-07-2006 à 09:58:24    

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]

Reply

Marsh Posté le 10-07-2006 à 09:58:24   

Reply

Marsh Posté le 10-07-2006 à 10:00:49    

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

Reply

Marsh Posté le 10-07-2006 à 10:01:31    

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
 

Reply

Marsh Posté le 10-07-2006 à 10:04:15    

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  

Reply

Marsh Posté le 10-07-2006 à 10:07:11    

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

Reply

Marsh Posté le 10-07-2006 à 10:08:32    

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. :/

Reply

Marsh Posté le 10-07-2006 à 10:11:51    

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

Reply

Marsh Posté le 10-07-2006 à 10:25:47    

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
Reply

Marsh Posté le 10-07-2006 à 10:27:44    

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

Reply

Marsh Posté le 10-07-2006 à 10:37:15    

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

Reply

Marsh Posté le 10-07-2006 à 10:40:40    

ç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
Reply

Marsh Posté le 10-07-2006 à 10:42:39    

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 !
Reply

Marsh Posté le 10-07-2006 à 10:55:28    

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
Reply

Marsh Posté le 10-07-2006 à 11:24:02    

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

Reply

Marsh Posté le 10-07-2006 à 12:02:57    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed