2011-09-13 14 views
6

Quiero formatear un número con un punto decimal con ceros a la izquierda.Dar formato a un número que contiene un punto decimal con ceros a la izquierda

Este

>>> '3.3'.zfill(5) 
003.3 

considera todos los dígitos y hasta el punto decimal. ¿Hay una función en python que considere solo la parte completa?

Solo necesito formatear números simples con no más de cinco decimales. Además, el uso de %5f parece considerar el seguimiento en lugar de ceros a la izquierda.

+0

¿Has probado '% 5.1f' aún? Si es así, ¿qué pasa con eso? –

+1

Rellena la cadena con espacios y aún considera el punto decimal y todo lo que sigue. – 3eee3

Respuesta

2

A partir de una cadena como tu ejemplo lo hace, se podría escribir una pequeña función como esta para hacer lo que quiera:

def zpad(val, n): 
    bits = val.split('.') 
    return "%s.%s" % (bits[0].zfill(n), bits[1]) 

>>> zpad('3.3', 5) 
'00003.3' 
+1

Eso es exactamente lo que no quería hacer, pero si no hay una función incorporada, supongo que funcionará. Gracias. – 3eee3

+0

@ 3ee3 Pruebe esto con ''3''. Si quieres una versión que funcione tanto en 'int's como en' float's, agrega una línea 'bits [0] = bits [0] .zfill (n)' antes del 'return', y cambia el' return 'to' return bits = '.'. join (bits) '. ' – agf

20

¿Es eso lo que buscas?

>>> "%07.1f" % 2.11 
'00002.1' 

Así que de acuerdo a su comentario, puedo llegar a este (aunque no tan elegante ya):

>>> fmt = lambda x : "%04d" % x + str(x%1)[1:] 
>>> fmt(3.1) 
0003.1 
>>> fmt(3.158) 
0003.158 
+1

No quiero dar cuenta de la fracción en mi código. – 3eee3

+0

Ah, ahora entiendo. Edité el código para dar cuenta de eso. – rumpel

3

gusta esta?

>>> '%#05.1f' % 3.3 
'003.3' 
+0

Todavía considera la parte fracción, y corta todo después del primer decimal – 3eee3

+0

Así que tenga en cuenta el número de dígitos de fracción y agréguelos al especificador de dígitos decimales. – Santa

5

me gusta el nuevo estilo de formato.

loop = 2 
pause = 2 
print 'Begin Loop {0}, {1:06.2f} Seconds Pause'.format(loop, pause) 
>>>Begin Loop 2, 0002.1 Seconds Pause 

En {1: 06.2f}:

  • 1 es el marcador de posición para una pausa variable de
  • 0 indica a la almohadilla con ceros a la izquierda
  • 6 número total de caracteres incluyendo el decimal punto
  • 2 la precisión
  • f convierte números enteros a flotadores
+0

¡Funciona a la perfección! Solo pequeños cambios para Python 3. – Royi

Cuestiones relacionadas