Page 1 sur 1

Question au sujet de "printf"...

Posté : 19 août 2007, 19:52
par Shadockou
Bonjour,
voila je suis entrain de lire le livre PHP5 avancé , que je trouve assez bien foutu.
Et il y a un exemple au chapitre 5 (page 109) , qui ne fonctionne apparement pas , à moins que cela ne
vienne de moi.
Pour information j'édite mon code php sur phpEclipse, et j'ai installé la derniere release de Xampp.

Voici le bout de code incriminé :
printf('%-4s B', 'A'); //Affiche A    B avec 4 espaces...
Mais justement le probléme est qu'il n'a qu'un seul espace, de quoi cela peut il venir ?

Merci d'avance pour votre aide.

Posté : 19 août 2007, 20:54
par Sékiltoyai
Si lorsque tu l'affiches, il ne te mets qu'un seul espace, c'est normal, en HTML, les espaces normaux sont sécables. Si tu veux voir tes quatres espaces, il faut que tu te mettes en text/plain
header('Content-Type: text/plain'); 
Ou bien que tu regardes la source HTML plutôt que le code interprété.

Posté : 19 août 2007, 20:58
par Invité
Bonsoir,

en HTML tu peux mettre autant d'espaces que tu veux, tu n'afficheras qu'un seul espace.
( jette un oeil sur le code source de ta page et tu retrouveras tes 4 espaces. )

ou alors utilise la balise <pre> :

Code : Tout sélectionner

<pre> <?php printf('%-4s B', 'A'); //Affiche A B avec 4 espaces... ?> </pre>

Posté : 19 août 2007, 21:39
par Shadockou
oui, merci beaucoup :) , effectivement ils sont dans la source , le livre n'avait pas préciser, et donc je m'attendais à voir ca dans la page.

En revanche

L'instruction :
<?php
printf('%03.4f',1.0);
?>
Ne m'affiche pas 001.0000 (comme l'annonce l'exemple)

mais 1.0000 et ceci dans la source comme dans la page.

Posté : 19 août 2007, 22:34
par Invité
pour afficher 001.0000 c'est printf("%08.4f",1.0);

Posté : 20 août 2007, 15:58
par Shadockou
Oui merci , effectivement ca fonctionne, mais du coup c'est une véritable erreur de la part du bouquin,
(ca me surprend un peu , c'est la 3eme edition en plus).
Je cite le passage :
Pour les nombres à virgule flottante, il est possible de définir la précision.Ainsi, 03.4 permet de forcer 3 chiffres à gauche et 4 décimales à droite.
<?php
printf('%03.4',1.0);   //affiche 001.0000
?>
Maintenant j'avoue que je comprend mal , pourquoi
printf("%08.4f",1.0);
affiche 001.0000 , si quelqu'un pouvait m'expliquer ce serait gentil
:oops: .

Posté : 20 août 2007, 16:49
par Sékiltoyai
Regarde la doc de sprintf().
Dans printf("%08.4f",1.0);
Le 0 est le remplisseur.
Le 8 est le spécificateur de taille.
Donc, printf() t'affiches ta chaine et remplit ensuite de 0 pour que la chaine arrive à une longueur de 8 caractères, et remplit à gauche, vu qu'il n'y a pas de spécificateur d'alignement pour dire d'aligner à gauche (par défaut, cela s'aligne à droit donc se remplit à gauche).

Posté : 20 août 2007, 17:06
par Shadockou
Ok ton explication est claire :) merci beaucoup.

Donc le 4 ajoute 4 zéros à droite du 1, et comme le spécificateur est à 8 et prend en compte le
point, il complete de 3 zeros à gauche.
Je pense que j'ai bien compris :P

Je vais de ce pas signaler cette erreur dans le topic concernant le bouquin.
(c'est bizarre quand même non ?)

Encore merci à toi, Sékiltoyai (et les autres), tu me donnes envie d'aller me creuser le ciboulon pour répondre aux problémes des autres dés que j'en aurai le niveau.

Posté : 20 août 2007, 17:13
par Sékiltoyai
Le quatre ne rajoute pas "4 zéros à droite", le 4 est l'indicateur de précision, soit 4 décimales après la virgule, d'où les 4 zéros.

Posté : 20 août 2007, 17:19
par Shadockou
Ok