Python formatear precio

Independientemente del lenguaje, es bastante común formatear un precio de un formato familiar para los usuarios. Hay diferentes arreglos que siempre deben realizarse. Por ejemplo, mostrar con una coma en lugar de un punto o mostrar 2 decimales independientemente de si contiene un decimal.

Algunas transformaciones deseadas pueden ser:

1.0 -> 1

1.5 -> 1,50

2.03 -> 2,03

¡Si!, puede darse el caso que no tengamos decimales pero al estar en formato float nos imprima un feo .0 al final.

Para solucionarlo debemos aplicar diferentes técnicas.

  1. Saber si contiene un .0 en lugar de un decimal mayor. Podemos comprobar el resto al dividir entre 1 con numero % 1 == 0. En ese caso convertiremos el tipo a int.
  2. Limitar los decimales a 2. Utilizaremos "%.2f" % numero.
  3. Cambiar el punto por una coma. Si convertimos a un string dispondremos de la función replace.

Todo unido quedaría unificado en el siguiente ejemplo.

def format_price(price):
    """Format price in the correct way
       Example:
        1.0 -> 1
        1.5 -> 1,50
        2.03 -> 2,03
    """
    return str("%.2f" % price if price % 1 != 0 else int(price)).replace(
           ".", ","
        )

Para versiones 3.8+ de Python podéis usar una versión tipada para mayor seguridad.

def format_price(price: float|int) -> str:
    """Format price in the correct way
       Example:
        1.0 -> 1
        1.5 -> 1,50
        2.03 -> 2,03
    """
    return str("%.2f" % price if price % 1 != 0 else int(price)).replace(
           ".", ","
        )

Espero que os sea de ayuda.

Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.

¿Me invitas a un café?

Puedes usar el terminal.

ssh customer@andros.dev -p 5555

Escrito por Andros Fenollosa

julio 12, 2022

2 min de lectura

Sigue leyendo