domingo, 16 de junio de 2019

Separador de miles con punto y coma decimal en Python

Pyhton es una herramienta estupenda para realizar cálculos pero se muestran en pantalla sin separador de miles y con el uso del punto como separador de decimales. Nos gustaría que las cifras se mostraran de la forma en la que estamos acostumbrados en español, esto es, usando el punto como separador de miles y la coma como separador de decimales.

Con el siguiente código podremos conseguir nuestro objetivo.

 a=1234.576  
 print(a)  
 b=round(a,2)  
 print(b)  
 print("{:,}".format(b))  
 print("{:,}".format(b).replace(',','~').replace('.',',').replace('~','.'))  

Resultado en pantalla.


Puede ver el código corriendo en el siguiente enlace.

Primero creamos la variable a con el valor 1234.576 y la imprimimos por pantalla. Vemos que no lleva separador de miles y que los decimales se separan con punto.

Luego creamos la variable b redondeando la variable a usando dos decimales e imprimimos la variable b. Seguimos sin separador de miles.

Ahora imprimimos la variable b haciéndola pasar por el comando format con ello conseguimos que ya tenga separador de miles. Lo que vemos es 1,234.58 que es perfectamente correcto para un anglosajón, pero en español lo que utilizamos es el punto como separador de miles y la coma como separador de decimales.

En la última línea de código lo que hacemos es utilizar el comando replace para conseguir cambiar los puntos por comas y las comas por puntos. Se ha de utilizar replace tres veces usando un caracter arbitrario, en nuestro caso hemos usado el caracter ~.

El motivo por el que usamos tres veces el comando replace se debe a que la primera vez cambiamos las comas por ese caracter arbitrario ~, la segunda vez cambiamos los puntos por comas, y la tercera vez cambiamos el caracter arbitrario ~ por puntos.

Si en lugar de ese caracter arbitrario desa poner otro caracter como una x tambien funcionará. La última línea quedaría así.

print("{:,}".format(b).replace(',','x').replace('.',',').replace('x','.'))

Con esto hemos solucionado el inconveniente que tenemos en España y otros paises Latinoamericanos, ya que no todo el mundo usa los separadores habituales del idioma inglés. Si te ha resultado útil puedes dejar en los comentarios tu experiencia.

6 comentarios:

  1. Que brutal,...es un codigo sucio, cuesta entenderlo a la primera y es extenso. Ojala encuentren la forma de que sea mas humano y por ende sencillo.

    ResponderEliminar
    Respuestas
    1. numero = 1234567.89
      miles_translator = str.maketrans(".,", ",.")
      numero = f"{numero:,}".translate(miles_translator)

      O si no quieres usar f-strings:

      miles_translator = str.maketrans(".,", ",.")
      numero = "{:,}".format(numero).translate(miles_translator)

      Que tal?

      Eliminar
  2. Gracias!! Me confundí un poco con los replace, pero me sirvió

    ResponderEliminar
  3. Gracias... me esta sirviendo de mucho...

    ResponderEliminar
  4. la primera parte es clara y entendible muy bien muchas gracias
    en la respuesta de dante tengo la duda < miles_translator = str.maketrans(".,", ",.") > no seria < miles_translator = str.maketrans(",.", ".,") >

    ResponderEliminar