2009-09-15 20 views
15

Voglio tamponare alcuni valori percentuali in modo che ci siano sempre 3 unità prima della cifra decimale. Con ints potrei usare '% 03d' - c'è un equivalente per i float?Galleggiante pad python

'% .3f' funziona per dopo la virgola ma '% 03f' non fa nulla.

risposta

33

'% 03.1f' funziona (1 potrebbe essere un numero qualsiasi, o stringa vuota):

>>> "%06.2f"%3.3 
'003.30' 

>>> "%04.f"%3.2 
'0003' 

noti che la larghezza del campo include decimale e cifre frazionarie.

+3

Se il valore è negativo, il leader '- 'consumerà uno dei conteggi della larghezza del campo - "% 06.2f"% -3.3 restituisce "-03.30", quindi se si con 3 cifre, anche se negative, dovrai aggiungere un altro alla larghezza del campo. Puoi farlo usando il valore di larghezza di campo '*' e passa un valore calcolato: value = -3.3; stampa "% 0 * .2f"% (6+ (valore <0), valore) – PaulMcG

+0

Ecco cosa intendeva @PaulMcGuire, ma usando un 'format':' value = -3.3; stampa "{t: 0 {format} .2f}". format (formato = 6 + (valore <0), t = valore) '. – Adobe

7

È possibile utilizzare anche zfill.

str(3.3).zfill(5) 
'003.3' 
+0

Questa risposta è più Pythonic della formattazione di stringhe. – refi64

4

In alternativa, se si desidera utilizzare .format:

   {:6.1f} 
       ↑ ↑ 
       | | 
# digits to pad | | # of decimal places to display 

Copypasta: {:6.1f}

Esempio di utilizzo:

'Num: {:6.1f}'.format(number)