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.

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Will you buy me a coffee?

You can use the terminal.

ssh customer@andros.dev -p 5555

Written by Andros Fenollosa

July 12, 2022

2 min of reading

You may also like