Formateo de números flotantes
En Python, el formateo de números flotantes se refiere a la representación de números decimales en un formato específico.
Supongamos que no recuerdas la función round()
que vimos en la sección anterior, o que simplemente no deseas usarla. En su lugar, quieres usar una cadena de formato.
Por ejemplo, si deseamos presentar un número decimal con un número específico de decimales, podemos hacerlo utilizando la función format()
o las f-strings de Python.
Si recordamos el código de nuestra calculadora de suma:
Python calculadora_sumadora.py | |
---|---|
Recuerda que la
f
al principio de la cadena de formato indica que se trata de una f-string, que permite la interpolación de variables1 en una cadena de caracteres. Y que dicha interpolación se realiza entre llaves{}
dentro de la cadena de caracteres.
Cuando la suma de ambos números supere los 3 dígitos enteros, como por ejemplo 999
+ 1
= 1000
, el resultado no se presentará con una coma separadora de miles, lo cual podría ser lo que deseamos para que la lectura del número sea fácil y rápida:
Ingrese el primer número: 999
Ingrese el segundo número: 1
La suma de 999.0 y 1.0 es igual a 1000.0
Para formatear el número 1000.0
con una coma separadora de miles, podemos utilizar la función format()
o las f-strings de la siguiente manera:
Python calculadora_sumadora.py | |
---|---|
En este caso, la f-string {(n1 + n2):,}
formatea el resultado de la suma de los números decimales n1
y n2
con una coma separadora de miles.
Si ejecutas el programa y la suma de los números decimales n1
y n2
supera los 3 dígitos enteros, el resultado se presentará con una coma separadora de miles:
``` py Terminal (Entrada/Salida) Ingrese el primer número: 999 Ingrese el segundo número: 1 La suma de 999.0 y 1.0 es igual a 1,000.0
Si analizamos la expresión `{(n1 + n2):,}` podremos notar que es bastante críptica[^2]. Sin embargo, es importante recordar que la _f-string_ nos permite formatear cadenas de caracteres de manera sencilla y legible. Y en este caso específico, nos permite formatear números con una coma separadora de miles, colocando `:,` después del número a formatear. Así, los dos puntos `:` indican que se realizará un formateo especial, y la coma `,` indica que se utilizará una coma como separador de miles.
Veamos otro ejemplo, retomando el código de nuestra calculadora de división:
``` py title="Python calculadora_divisora.py" linenums="1"
# Ingreso de datos por el usuario, convertidos a números enteros
n1 = int(input("Ingrese el primer número: "))
n2 = int(input("Ingrese el segundo número: "))
# Calcular la división, de los números enteros, redondeada al número entero más cercano con dos decimales
division = round(n1 / n2, 2)
# Imprimir el resultado
print(f"La división de {n1} por {n2} es igual a {division}")
Vamos a modificarlo de la siguiente manera:
En este caso, la f-string {division:.2f}
formatea el resultado de la división de los números enteros n1
y n2
con dos decimales de precisión, eliminando el uso de la función round()
. Aquí tenemos otro fragmento de código críptico2 :.2f
, pero que nos permite efectuar el mencionado formato. Y podemos leer {division:.2f}
como "formatear el valor almacenado la variable division
con dos decimales de precisión, es decir, que redondee en dos dígitos la cantidad de dígitos que posea luego del punto decimal".
Si ejecutamos el programa y la división de los números enteros n1
y n2
supera los 3 dígitos enteros, el resultado se presentará con dos decimales de precisión:
py Terminal (Entrada/Salida)
Ingrese el primer número: 2
Ingrese el segundo número: 3
La división de 2 por 3 es igual a 0.67
Como podemos ver, tanto si usamos la función round()
como si aplicamos el formateo de cadenas llegamos a la misma solución. Así es como resolvemos el mismo problema con diferentes enfoques y reforzamos la teoría de que en programación, muy a menudo, podemos resolver el mismo problema de múltiples maneras.
¿Cuál es el mejor enfoque: función o formateo?
Las funciones para números flotantes en Python, como round()
y el formateo de números flotantes con f-strings, nos permiten realizar operaciones y manipulaciones específicas con números decimales, así como presentarlos en un formato específico para facilitar su lectura y comprensión. Y podemos alcanzar el mismo resultado aplicando cualquier de los dos enfoques.
¿Cuál es el mejor enfoque? La respuesta es que depende del contexto y de la preferencia del programador. La función round()
es útil cuando se desea redondear un número decimal al número entero más cercano o a un número específico de decimales. Por otro lado, el formateo de números flotantes con f-strings es útil cuando se desea presentar un número decimal en un formato específico, como con una coma separadora de miles o con un número específico de decimales.
En este caso, son bastante equivalentes. Sin embargo, puedes imaginar que a veces es útil usar una función para poder pasar un argumento como n dígitos como ese segundo argumento, o puedes imaginarte simplemente decidiendo de antemano que quieres visualizar 0,2
y luego formatear la salida para que se vea así.
Referencias
-
La interpolación de variables es una técnica utilizada en programación durante el procesamiento de texto para insertar el valor de una variable dentro de una cadena de texto. En lugar de construir cadenas de texto manualmente concatenando fragmentos de texto con valores de variables, la interpolación permite insertar estos valores de manera directa y más legible. ↩
-
Críptico: Que es difícil de entender o interpretar. Se aplica a situaciones donde la información proporcionada no es clara, es ambigua o requiere un conocimiento profundo y específico para ser entendida.
En este caso, se refiere a un fragmento de código que no es inmediatamente comprensible por el programador. ↩