Python formatear precio | Programador Web Valencia

Python formatear precio

1 minuto

Python

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.

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me ayudas?

Comprame un café
Pulsa sobre la imagen

No te sientas obligado a realizar una donación, pero cada aportación mantiene el sitio en activo logrando que continúe existiendo y sea accesible para otras personas. Además me motiva a crear nuevo contenido.

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario

Tal vez también te interese...