Curso
Redondear números a dos decimales es una técnica importante en Python. Es especialmente útil en cálculos financieros, presentación de datos e informes científicos.
Python ofrece varios métodos para un redondeo preciso. En este tutorial, te enseño cómo redondear un número a dos decimales en Python usando funciones integradas, librerías y métodos de formateo.
Si estás empezando como analista de datos, te recomiendo el curso de DataCamp Introduction to Python para aprender las bases de Python para la manipulación y transformación de datos. Nuestro tutorial de Python NumPy también te será útil si necesitas redondear grandes arrays de números en flujos de trabajo de análisis de datos.
Resumen (TL;DR)
-
Usa
round(number, 2)para redondeo aritmético: cambia el valor real. -
Usa
f"{number:.2f}"ostr.format()solo para mostrar por pantalla: el float original no cambia. -
Usa el módulo
decimalcuando necesites precisión decimal exacta (p. ej., cálculos financieros). -
Usa
np.round(array, 2)para redondear un array de NumPy completo en una sola llamada. -
Ojo con las sorpresas de precisión en floats:
round(2.675, 2)devuelve2.67, no2.68, por cómo se almacenan los floats en memoria.
Desarrolla habilidades de aprendizaje automático
Qué son el redondeo y los decimales
Los decimales son los dígitos que aparecen justo después del punto decimal de un número. Determinan la precisión: cuantos más decimales, mayor precisión, y viceversa.
Redondear un número consiste en ajustarlo reduciendo sus cifras decimales. Se usa para simplificar y mantener consistencia entre cálculos. Aun así, redondear a un número concreto de decimales afecta a la exactitud de los resultados por los pequeños errores que introduce.
Python ofrece diferentes métodos para redondear números a dos decimales. Los siguientes ejemplos explican estas técnicas en detalle.
Usar round() para redondear un número en Python
La función round() es la función integrada de Python para redondear números de coma flotante al número de decimales indicado. Puedes especificar los decimales pasando el valor como segundo argumento. El ejemplo siguiente imprime 34.15.
# Example number to be rounded
number = 34.14559
# Rounding the number to 2 decimal places
rounded_number = round(number, 2)
print(rounded_number)
# 34.15
La función round() de Python usa "round half to even" como modo de redondeo por defecto cuando omites el segundo argumento. El redondeo al par (bankers’ rounding) significa que cuando un número está exactamente a mitad de camino entre dos enteros, se redondea al entero par más cercano. Esta técnica ayuda a minimizar errores acumulados de redondeo.
Cuidado con la precisión de float con round()
Hay un detalle sutil que conviene conocer antes de usar round() en código financiero. Prueba esto:
print(round(2.675, 2)) # You might expect 2.68
# Output: 2.67
El resultado es 2.67, no 2.68. El valor 2.675 no puede representarse exactamente en coma flotante binaria (IEEE 754); el valor almacenado es ligeramente menor que 2.675, así que Python redondea hacia abajo.
Si necesitas un redondeo exacto para cálculos financieros, usa el módulo decimal con un modo de redondeo explícito:
from decimal import Decimal, ROUND_HALF_UP
result = Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print(result) # 2.68
Usar técnicas de formateo de cadenas para redondear en Python
Las técnicas de formateo de cadenas son útiles para redondear a dos decimales cuando vas a mostrar el número en la salida.
Ten en cuenta que al usar formateo de cadenas para redondear, lo que obtienes es una cadena formateada: el número original no cambia. Si haces cálculos con el original, se basarán en el valor sin redondear y pueden darte resultados inesperados.
Redondear con el operador %
El operador % ofrece un método tradicional para dar formato a números con dos decimales. Permite crear cadenas formateadas insertando valores en marcadores de posición.
En el ejemplo, f indica que el valor es de coma flotante y .2 especifica que se muestre con dos decimales.
# Example number to be rounded
number = 3.14159
# Using the % operator to round to 2 decimal places
formatted_number = "%.2f" % number
print(formatted_number)
# 3.14
Redondear con str.format()
El método str.format() ofrece una forma más flexible de gestionar formateos complejos. Al permitir marcadores con nombre, muchos desarrolladores lo prefieren frente al operador %. En el ejemplo, :.2f dentro de las llaves indica que el número se muestre con dos decimales. El código imprimirá 3.14.
# Example number to be rounded
number = 3.14159
# Using str.format() to round to 2 decimal places
formatted_number = "{:.2f}".format(number)
print(formatted_number)
# 3.14
Redondear con f-strings (Python 3.6+)
Las f-strings llegaron en Python 3.6 y hoy son la forma preferida de incrustar valores en cadenas. La sintaxis de f-strings es especialmente limpia para redondear: tienes el formateo en una sola línea sin llamadas adicionales. El siguiente código imprime 14.68.
# Example number to be rounded
number = 14.67856
# Using f-strings to round to 2 decimal places
formatted_number = f"{number:.2f}"
print(formatted_number)
# 14.68
Usar format() para redondear un número en Python
La función integrada format() recibe un valor y una especificación de formato y devuelve una cadena formateada. A diferencia de str.format(), pasas el número directamente en lugar de incrustarlo en una plantilla. El siguiente código imprime 345.69.
# Example number to be rounded
number = 345.68776
# Using the built-in format() to round to 2 decimal places
formatted_number = format(number, ".2f")
print(formatted_number)
# 345.69
Usar otros módulos para redondear un número en Python
Más allá de Python básico, hay otros módulos que puedes usar para redondear números. Te muestro tres ejemplos destacados: math, decimal y NumPy.
Redondear con el módulo math
El módulo math no ofrece funciones que redondeen directamente a un número específico de decimales. Sin embargo, puedes combinarlo con operaciones aritméticas para redondear a dos decimales.
La función math.floor() redondea hacia abajo al entero más cercano. Para redondear hacia abajo a dos decimales, multiplica por 100, aplica math.floor() y divide entre 100. El siguiente código imprime 3.14.
# Import math module
import math
# Example number to be rounded
number = 3.14159
# Using math.floor() to round down to 2 decimal places
rounded_down = math.floor(number * 100) / 100
print(rounded_down)
# 3.14
De forma similar, math.ceil() redondea hacia arriba al entero más cercano. Para redondear hacia arriba a dos decimales, multiplica por 100, aplica math.ceil() y divide entre 100. El siguiente código imprime 3.15.
# Import the math module
import math
# Example number to be rounded
number = 3.14159
# Using math.ceil() to round up to 2 decimal places
rounded_up = math.ceil(number * 100) / 100
print(rounded_up)
# 3.15
Redondear con el módulo decimal
El módulo decimal en Python es útil para redondear con precisión usando el método .quantize(). En el ejemplo, fijamos la precisión a 0.01 para indicar que queremos dos decimales.
# Import the decimal module
from decimal import Decimal
# Example number to be rounded
number = Decimal("18.73869")
# Define the rounding precision to 2 decimal places
precision = Decimal('0.01')
# Using the quantize method with ROUND_UP
# to round the number up to 2 decimal places
rounded_number = number.quantize(precision)
print(rounded_number)
# 18.74
Si buscas un comportamiento de redondeo siempre hacia arriba, echa un vistazo a nuestro tutorial How to Round Up a Number in Python para aprender más sobre los módulos math y decimal, y otras técnicas que garantizan que el número siempre suba, en lugar de bajar. Si quieres profundizar en la transformación de datos en general, revisa nuestro itinerario Data Analyst with Python para potenciar tus habilidades analíticas.
Redondear con NumPy
Al trabajar con arrays en NumPy, usa np.round() para redondear todos los elementos de una vez. Es más rápido y legible que iterar manualmente.
import numpy as np
prices = np.array([1.2345, 9.8765, 3.14159])
rounded_prices = np.round(prices, 2)
print(rounded_prices)
# [1.23 9.88 3.14]
np.round() aplica la misma regla de redondeo al par que la función integrada round() de Python. El método .round() funciona igual en DataFrames y Series de pandas:
import pandas as pd
df = pd.DataFrame({"price": [1.2345, 9.8765, 3.14159]})
df["price_rounded"] = df["price"].round(2)
print(df)
# price price_rounded
# 0 1.2345 1.23
# 1 9.8765 9.88
# 2 3.14159 3.14
Para una visión más amplia de la transformación de datos con pandas, consulta nuestro tutorial de pandas.
Cuándo usar cada método de redondeo en Python
Guía rápida para elegir el enfoque adecuado:
| Método | Ideal para | ¿Cambia el valor? | Devuelve |
|---|---|---|---|
round(x, 2) |
Aritmética general | Sí | float |
f"{x:.2f}" |
Mostrar / imprimir | No | str |
str.format() |
Mostrar / imprimir | No | str |
% operator |
Mostrar / imprimir (legado) | No | str |
format(x, ".2f") |
Mostrar / valor único | No | str |
math.floor() / ceil() |
Redondear siempre abajo / arriba | Sí | float |
Decimal.quantize() |
Finanzas / decimal exacto | Sí | Decimal |
np.round(arr, 2) |
Arrays de NumPy | Sí | ndarray |
Algunas reglas prácticas para elegir:
-
¿Solo necesitas mostrar un número? Usa una f-string (
f"{x:.2f}"). Una línea, sin imports y sin efectos sobre el valor original. -
¿Vas a seguir calculando con el resultado? Usa
round(x, 2). Devuelve un float con el que puedes continuar operando. -
¿Código financiero o contable? Usa
Decimal.quantize(). Las sorpresas de precisión con floats (round(2.675, 2) == 2.67) no ocurren con el módulodecimal. -
¿Necesitas subir siempre o bajar siempre? Usa
math.ceil()omath.floor(). Ignoran las reglas de redondeo habituales. -
¿Trabajas con un array de NumPy o una columna de pandas? Usa
np.round(arr, 2)oseries.round(2). Gestionan la colección completa de una vez. -
¿Manteniendo código antiguo? El operador
%sigue funcionando, pero las f-strings lo sustituyeron en Python 3.6: mejor úsalas en código nuevo.
Conclusiones
Redondear a dos decimales es clave para mejorar la precisión en cálculos financieros y científicos. En este artículo, hemos visto los distintos métodos para redondear a dos decimales, incluidas funciones integradas, técnicas de formateo de cadenas y el módulo math. Es importante entender y elegir el método adecuado según lo que necesites: precisión, estilo de formato, etc. Te animo a practicar con distintos ejemplos para identificar qué encaja mejor en cada caso.
Si quieres llevar tus habilidades de Python más lejos, revisa nuestro itinerario de habilidades Python Programming, que cubre funciones, decoradores y patrones avanzados de Python. Nuestro itinerario profesional Python Developer también está diseñado para ayudarte en tu formación continua como desarrollador mientras aprendes estructuras de datos y algoritmos más avanzados.
Conviértete en un Científico ML
Preguntas frecuentes
¿Cuál es la forma más simple de redondear un número a dos decimales en Python?
La forma más sencilla es usar la función integrada round().
¿Por qué un número se redondea al entero más cercano al usar la función round()?
El método por defecto de round() es redondeo al par (round half to even). Para redondear a dos decimales, debes pasar el segundo argumento como 2, es decir, round(3.14159, 2).
¿Cómo se usa la función format() para redondear un número a dos decimales?
La función format() se usa para mostrar un número con el número de decimales especificado dentro de una cadena formateada.
¿Qué es el round half to even?
El método round half to even, o redondeo al par (bankers’ rounding), consiste en que un número exactamente a mitad entre dos enteros se redondea al entero par más cercano.
¿El módulo math permite redondear a dos decimales en Python?
Solo puedes usar math.floor() y math.ceil() combinadas con otras operaciones para redondear a un número concreto de decimales.
¿Por qué round(2.675, 2) devuelve 2.67 en vez de 2.68?
Es un problema de precisión en coma flotante. El valor 2.675 no puede representarse exactamente en binario (IEEE 754); el valor almacenado es ligeramente menor que 2.675, por eso Python redondea a 2.67.
Para evitarlo en código financiero, usa el módulo decimal con un modo de redondeo explícito: Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP) devuelve 2.68 como esperas.
¿Cómo redondeo todos los valores de un DataFrame de pandas a 2 decimales?
Usa el método .round() sobre un DataFrame o Series. Para redondear una sola columna: df["price"] = df["price"].round(2). Para redondear todas las columnas numéricas a la vez: df = df.round(2).
