miles formato python format locale number-formatting digit-separator

python - formato - Agregue separadores de millares ''decimal-mark'' a un número



formato miles en python (7)

Aquí hay solo una respuesta alternativa. Puede usar el operador dividido en python y mediante alguna 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

¿Cómo puedo formatear 1000000 a 1.000.000 en Python? donde el ''.'' es el separador de miles de decimales.


Basándome en la respuesta de Mikel, implementé su solución de esta manera en mi diagrama 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)))


Es extraño que nadie haya mencionado una solución sencilla con regex:

import re print(re.sub(r''(?<!^)(?=(/d{3})+$)'', r''.'', "12345673456456456"))

Da el siguiente resultado:

12.345.673.456.456.456

También funciona si desea separar los dígitos solo antes de la coma:

re.sub(r''(?<!^)(?=(/d{3})+,)'', r''.'', "123456734,56456456")

da:

123.456.734,56456456

la expresión regular usa la búsqueda anticipada para verificar que el número de dígitos después de una posición dada sea divisible por 3.



Si desea agregar un separador de miles, puede escribir:

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

Pero solo funciona en Python 2.7 y superior.

Vea la sintaxis de la cadena de formato .

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

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

el beneficio adicional de usar locale.format() es que usará el 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''


Simplemente extendiendo la respuesta un poco aquí :)

Necesitaba tener un milésimo separador y limitar la precisión de un número de punto flotante.

Esto se puede lograr utilizando la siguiente cadena de formato:

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

Esto describe el mini lenguaje del especificador de format() :

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

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


Usar itertools puede darte más 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''