Question au sujet de "printf"...

Eléphant du PHP | 97 Messages

19 août 2007, 19:52

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.

ViPHP
ViPHP | 5924 Messages

19 août 2007, 20:54

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

Invité
Invité n'ayant pas de compte PHPfrance

19 août 2007, 20:58

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>

Eléphant du PHP | 97 Messages

19 août 2007, 21:39

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.

Invité
Invité n'ayant pas de compte PHPfrance

19 août 2007, 22:34

pour afficher 001.0000 c'est printf("%08.4f",1.0);

Eléphant du PHP | 97 Messages

20 août 2007, 15:58

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

ViPHP
ViPHP | 5924 Messages

20 août 2007, 16:49

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

Eléphant du PHP | 97 Messages

20 août 2007, 17:06

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.

ViPHP
ViPHP | 5924 Messages

20 août 2007, 17:13

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.

Eléphant du PHP | 97 Messages

20 août 2007, 17:19

Ok