2008-09-25 38 views
540

Dado:número Display con ceros a la izquierda

a = 1 
b = 10 
c = 100 

Quiero mostrar un cero para todos los números con menos de 2 dígitos, es decir:

01 
10 
100 
+0

duplicado: http://stackoverflow.com/questions/733454/best-way -to-format-integer-as-string-with-leading-zeros – darkgaze

+5

Supongo que la pregunta vinculada debe ser el duplicado de esto (en términos de votos, calidad de respuestas y edad) – TheEspinosa

Respuesta

575

Aquí son:

print "%02d" % (1,) 

Básicamente % es como printf o sprint.

+4

Ejemplo: imprimir "% 05d"% result ['postalCode'] para un código postal de 5 dígitos. –

+1

'x ="% 02d.txt "% i' provoca TypeError (no se puede concatenar los objetos 'str' e 'int'), pero' x = "% 02d.txt"% (i,) 'no. Interesante. Me pregunto dónde está eso documentado – theta

+0

@theta En 2.7.6, no me sale un error. ¿Tal vez esto fue un error en una versión específica de Python que han solucionado desde entonces? –

49
x = [1, 10, 100] 
for i in x: 
    print '%02d' % i 

resultados:

01 
10 
100 

Lea more information about string formatting using % en la documentación.

+9

El ejemplo de la documentación apesta. Lanzan el mapeo con la muestra cero inicial, por lo que es difícil saber cuál es, a menos que ya sepas cómo funciona. Eso es lo que me trajo aquí, en realidad. – Grant

274

En Python 2.6+ y 3.0+, se utiliza el método format() cadena:

for i in (1, 10, 100): 
    print('{num:02d}'.format(num=i)) 

o el uso de la incorporado (para un solo número):

print(format(i, '02d')) 

Consulte la documentación de PEP-3101 para las nuevas funciones de formateo.

+25

Funciona también en Python 2.7.5. También puede usar el formato '{: 02d}'. (1) si no desea usar argumentos con nombre. –

+0

Funciona bien en 2.7.2, con un punto flotante "{0: 04.0f}". El formato (1.1) da 0001 (: 04 = al menos 4 caracteres, en este caso liderando 0's, .0f = punto flotante sin decimales) Soy consciente del formato% pero quería modificar una declaración .format existente sin reescribir la cosa * whole *. ¡Gracias! –

599

Puede utilizar zfill:

print str(1).zfill(2) 
print str(10).zfill(2) 
print str(100).zfill(2) 

impresiones:

01 
10 
100 
+49

Me gusta esta solución, ya que ayuda no solo al dar salida al número, sino también cuando debe asignarlo a una variable ... p. x = str (datetime.date.today(). month) .zfill (2) devolverá x como '02' para el mes de feb. – EroSan

82

O esto:

print '{0:02d}'.format(1)

36

La forma de hacer esto Pythonic:

str(number).rjust(string_width, fill_char) 

De esta manera, la cadena original se devuelve sin cambios si su longitud es mayor que string_width. Ejemplo:

a = [1, 10, 100] 
for num in a: 
    print str(num).rjust(2, '0') 

Resultados:

01 
10 
100 
+0

¡Magia de pitón! Gran respuesta – SAAD

+0

excelentes soluciones !!! –

73
print('{:02}'.format(1)) 
print('{:02}'.format(10)) 
print('{:02}'.format(100)) 

grabados:

01 
10 
100 
+1

De esta manera le permite repetir el argumento varias veces dentro de la cadena: 'Un cero: {0:02}, dos ceros: {0:03}, ninezeros: {0: 010} '. Formato (6)' – srodriguex

+2

Solo compatible con Python 3. Si usa Python 2.7, haga 'print '{: 02}'. format (1)' – Blairg23

2
width = 5 
num = 3 
formatted = (width - len(str(num))) * "0" + str(num) 
print formatted 
29

u otra solución.

"{:0>2}".format(number) 
+2

Está más claro, gracias. – Zety

+0

Esta sería la forma de Python, aunque incluiría el parámetro para mayor claridad - '" {0: 0> 2} ".formato (número) ', si alguien quiere nLeadingZeros deberían tener en cuenta que también pueden hacer:' "{0: 0> {1}}". format (number, nLeadingZeros + 1) ' –

-1

Si se trata de números que son uno o dos dígitos:

'0'+str(number)[-2:] o '0{0}'.format(number)[-2:]

6

En Python 3.6, se puede hacer esto de manera sucinta con f -strings mediante el uso de:

f'{val:02}' 

que imprime la variable con el nombre val con un fill valor de 0 y width de 2.

Para su ejemplo específico puede hacerlo muy bien en un bucle:

a, b, c = 1, 10, 100 
for val in {a, b, c}: 
    print(f'{val:02}') 

que imprime:

01 
10 
100 
Cuestiones relacionadas