2011-04-01 28 views
46

¿Cómo puedo formatear 1000000 en 1.000.000 en Python? donde el '.' es el separador de miles de decimales.Agregue separadores de millares 'decimal-mark' a un número

+2

Por favor, aclare su pregunta. Muestre un código, mencione el tipo de datos del objeto que desea imprimir, dé como resultado el resultado. –

+0

@SvenMarnach: ¡En segundo lugar! – Trufa

+0

No puede tener más de un punto decimal en un número. ¿Qué se supone que significa '1.000.000'? ¿Te refieres a comas? –

Respuesta

95

Si desea agregar un separador de miles, puede escribir:

>>> '{0:,}'.format(1000000) 
'1,000,000' 

pero sólo funciona en Python 2.7 y superior.

Ver format string syntax.

En versiones anteriores, puede utilizar locale.format():

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, '') 
'en_AU.utf8' 
>>> locale.format('%d', 1000000, 1) 
'1,000,000' 

la ventaja añadida de utilizar locale.format() es que va a utilizar separador de miles de su localidad, por ejemplo,

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, 'de_DE.utf-8') 
'de_DE.utf-8' 
>>> locale.format('%d', 1000000, 1) 
'1.000.000' 
+1

Si está trabajando con monedas, también puede usar babel.numbers.format_currency helper. – semente

+2

Para flotantes, la sintaxis es '{: 6, .2f}' donde '6' es el ancho del campo y' 2' es la precisión. La colocación de la coma me hizo tropezar un poco. – nathanielobrown

+0

Puede verificar todas las configuraciones regionales instaladas con "$ locale -a", una instalación predeterminada de Ubuntu, por ejemplo, solo tendrá en_US, por lo que esta no es una estrategia viable. – xApple

12

Sólo extiende la respuesta un poco aquí :)

que tenía que ambos tienen un separador de millares y limitan la precisión de un número de coma flotante.

Esto se puede lograr mediante el uso de la cadena siguiente formato:

> my_float = 123456789.123456789 
> "{:0,.2f}".format(my_float) 
'123,456,789.12' 

Esto describe mini-lenguaje de la format() de -specifier:

[[fill]align][sign][#][0][width][,][.precision][type] 

Fuente: https://www.python.org/dev/peps/pep-0378/#current-version-of-the-mini-language

+2

¿Y si quisiera obtener la siguiente salida: ''123.456.789,12''? –

+0

@ dot.Py podría establecer una configuración regional apropiada 'locale.setlocale (locale.LC_ALL, 'de_DE.utf-8')' y luego usar '(" {:.% Dn} "% (math.log10 (my_float) + 3)). Format (my_float) 'sin embargo, la cadena de formato 'n' es el equivalente a la configuración regional de 'g' en lugar de 'f', por lo que el campo de precisión se vuelve desordenado. – Duncan

1

Usando itertools puede dar usted un poco más de flexibilidad:

>>> from itertools import zip_longest 
>>> num = "1000000" 
>>> sep = "." 
>>> places = 3 
>>> args = [iter(num[::-1])] * places 
>>> sep.join("".join(x) for x in zip_longest(*args, fillvalue=""))[::-1] 
'1.000.000' 
0

Aquí solo hay una respuesta alternativa. Puede usar el operador de división en pitón y por medio de una lógica extraña Aquí está el código

i=1234567890 
s=str(i) 
str1="" 
s1=[elm for elm in s] 
if len(s1)%3==0: 
    for i in range(0,len(s1)-3,3): 
     str1+=s1[i]+s1[i+1]+s1[i+2]+"." 
    str1+=s1[i]+s1[i+1]+s1[i+2] 
else: 
    rem=len(s1)%3 
    for i in range(rem): 
     str1+=s1[i] 
    for i in range(rem,len(s1)-1,3): 
     str1+="."+s1[i]+s1[i+1]+s1[i+2] 

print str1 

salida

1.234.567.890 
1

Sobre la base de la respuesta de Mikel, he implementado su solución como esta en mi parcela matplotlib. Pensé que algunos podrían encontrarlo útil:

ax=plt.gca() 
ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, loc: locale.format('%d', x, 1))) 
Cuestiones relacionadas