2010-01-06 8 views
0

Je dois toujours savoir pourquoi, plutôt que comment, donc ici je vais:Comment fonctionne ce code de formatage?

Comment ce:

'{0:01.2f}'.format(5.555) #returns '5.55' 

'{0:01.1f}'.format(5.555) #returns '5.5' 

'{0:1.2f}'.format(5.555) #returns '5.55' again 

'{0:1.1f}'.format(5.555) #returns '5.5' again 

Pourquoi est-ce pas ajouter zéro padding en retournant '05 0,5' au lieu de simplement '5.5' quand j'ai le zéro supplémentaire. Cela ne semble pas fonctionner.

Aussi, pourquoi la chaîne 0: 1.1f au lieu de 0: 0.1f, etc. Est-ce juste une convention d'utiliser le nombre 1 avant la décimale au lieu d'un zéro, ou est-ce la syntaxe?

+3

La spécification est ici: http://docs.python.org/library/string.html#grammar-token-format_spec – Seth

Répondre

6

C'est parce que le caractère 0 permet le remplissage par zéro, mais vous avez une largeur de 1 ensemble. Définissez la largeur à 2 (comme '{0:02.1f}' et vous verrez un 0

Modifier - en fait, je ne sais pas si 2 suffit, parce que je ne sais pas comment il se comporte avec plus de chiffres après la . point décimal donc, pour être sûr, faire quelque chose comme 5 et voir ce qu'il fait alors

Edit 2 -.. ok, je viens d'essayer la largeur correspond à la largeur totale, y compris tous les chiffres et la virgule Vous obtiendrez ainsi:

>>> '{0:05.2f}'.format(5.555) 
'05.55' 

Remarque t la longueur totale de la chaîne est maintenant 5, avec un 0 initial car le remplissage nul est activé et qu'il tronque à 2 chiffres après la virgule à cause de .2

2

Vous devez spécifier une largeur en tenant compte de tous les caractères, y compris les décimales et le point. Si vous voulez que 05.55 est de 5 caractères, donc:

>>>'{0:05.2f}'.format(5.555) 
'05.55' 
+1

Merci, up vote pour vous aussi . – orokusaki