Cómo redondear números en Python: uso de round(), Decimal, floor y ceil

1. Introducción

Python es un lenguaje de programación ampliamente utilizado en áreas como el análisis de datos y el aprendizaje automático. Una de las operaciones más comunes en la programación diaria es el «redondeo de números». Por ejemplo, es frecuente necesitar redondear a un número entero o a un número con cierta cantidad de decimales. En este artículo explicaremos en detalle los diferentes métodos para redondear en Python. Desde la función incorporada round() hasta el módulo Decimal, que permite un manejo más preciso, veremos las distintas formas de redondear según cada situación. A través de esta guía, podrás mejorar la precisión del procesamiento numérico y aumentar la confiabilidad de tu código.

2. ¿Qué es el redondeo en Python?

El redondeo en Python consiste en convertir un número al entero más cercano o a un valor con la cantidad de decimales especificada. Esta operación es fundamental en el procesamiento de datos y en los cálculos numéricos. Por ejemplo, en datos financieros o en cálculos físicos, la forma de redondear puede tener un gran impacto en los resultados. En Python, la función incorporada round() permite redondear fácilmente, pero tiene algunas limitaciones. En particular, hay que tener cuidado con la precisión de los números de punto flotante. Para obtener resultados más exactos, se recomienda utilizar el módulo Decimal. En la siguiente sección, revisaremos los fundamentos del redondeo con la función round().
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Uso básico de la función round()

Fundamentos del uso de round()

La función round() viene incluida en Python y se utiliza para redondear números. Su uso básico es el siguiente:
print(round(1.5))  # Salida: 2
print(round(2.5))  # Salida: 2
En este ejemplo, 1.5 se redondea a 2 y 2.5 también se redondea a 2. Esto se debe a que round() en Python aplica el método conocido como «Banker’s Rounding» (redondeo hacia el par). Es decir, cuando el valor decimal termina en 0.5, se redondea hacia el número par más cercano.

Redondear especificando decimales

Al usar un segundo argumento en round(), es posible definir el número de decimales a mostrar. Ejemplo:
print(round(1.456, 2))  # Salida: 1.46
En este caso, el número se redondea en la tercera cifra decimal y se muestra hasta la segunda.

Puntos a tener en cuenta con round()

No obstante, round() tiene ciertas particularidades. En ocasiones, los números de punto flotante como 0.1 o 0.2 no pueden representarse con exactitud en la memoria de la computadora, lo que puede dar resultados inesperados al redondear. En esos casos, se recomienda utilizar el módulo Decimal para obtener mayor precisión. En la siguiente sección veremos en detalle cómo usar Decimal.

4. Redondeo preciso con el módulo Decimal

¿Qué es el módulo Decimal?

El módulo Decimal en Python fue diseñado para resolver los problemas de precisión de los números de punto flotante (float). Se utiliza especialmente en contextos donde los errores no son aceptables, como en cálculos financieros o científicos. Decimal ofrece operaciones exactas en base decimal y evita los errores típicos de los flotantes. Por ejemplo, al usar float se pueden presentar resultados como estos:
print(0.1 + 0.2)  # Salida: 0.30000000000000004
Mientras que con Decimal obtenemos un resultado exacto:
from decimal import Decimal

print(Decimal('0.1') + Decimal('0.2'))  # Salida: 0.3

Cómo crear objetos Decimal

Los objetos Decimal se generan pasando el número como cadena de texto, lo que elimina los errores de representación de flotantes:
from decimal import Decimal

d = Decimal('1.456')
print(d)  # Salida: 1.456

Redondeo con el método quantize()

El método quantize() permite redondear un número Decimal a la cantidad de decimales deseada. Además, se puede especificar el modo de redondeo. El más común es ROUND_HALF_UP, aunque existen otros como ROUND_DOWN. Ejemplo:
from decimal import Decimal, ROUND_HALF_UP

d = Decimal('1.456')
redondeado = d.quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)
print(redondeado)  # Salida: 1.46

Ventajas y usos del módulo Decimal

El módulo Decimal es especialmente útil en cálculos financieros, donde errores mínimos pueden acumularse y causar pérdidas significativas. También es recomendable en análisis científicos donde la precisión es crítica.
侍エンジニア塾

5. Introducción a math.floor() y math.ceil()

Uso de math.floor()

La función math.floor() devuelve el entero más grande menor o igual al número dado. Es decir, realiza un “redondeo hacia abajo”:
import math

print(math.floor(3.9))  # Salida: 3

Uso de math.ceil()

Por el contrario, math.ceil() devuelve el entero más pequeño mayor o igual al número dado. Se trata de un “redondeo hacia arriba”:
import math

print(math.ceil(3.1))  # Salida: 4

Cuándo usar floor() y ceil()

Ambas funciones son útiles en contextos como análisis estadístico o desarrollo de videojuegos, donde se necesita un control específico sobre cómo redondear: por ejemplo, sistemas de puntuación o reglas que requieren siempre truncar o siempre redondear hacia arriba.

6. Ejemplos avanzados combinando funciones

Los métodos de redondeo en Python incluyen round(), Decimal, floor() y ceil(). Al combinarlos, se pueden crear soluciones más flexibles para manejar números en distintas situaciones.

Creación de funciones personalizadas

Por ejemplo, podemos crear una función personalizada que primero redondee a cierto número de decimales y luego aplique un redondeo hacia arriba con ceil():
import math

def custom_round(value, digits):
    rounded_value = round(value, digits)
    return math.ceil(rounded_value)

print(custom_round(1.456, 2))  # Salida: 2
De esta forma, se pueden implementar reglas de redondeo específicas según las necesidades. También es posible combinar Decimal para mayor precisión.

7. Preguntas frecuentes (FAQ)

1. ¿En qué casos debo usar la función round()?

La función round() es la opción más sencilla para redondear números en Python, ya sea flotantes o enteros. Sin embargo, usa por defecto el método “Banker’s Rounding” (redondeo hacia el par). Es adecuada cuando este comportamiento es aceptable. Ejemplo:
print(round(1.456, 2))  # Salida: 1.46

2. ¿Cuándo es mejor usar el módulo Decimal?

El módulo Decimal es ideal en escenarios donde la precisión es crítica, como en cálculos financieros o científicos. Permite evitar errores asociados a los flotantes. Ejemplo:
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2'))  # Salida: 0.3

3. ¿Qué hacer si los resultados de redondeo no son los esperados?

Si el resultado difiere de lo esperado, probablemente se deba al redondeo hacia el par de round(). En esos casos, se recomienda usar Decimal con el modo ROUND_HALF_UP.
from decimal import Decimal, ROUND_HALF_UP

d = Decimal('1.25')
print(d.quantize(Decimal('0.1'), rounding=ROUND_HALF_UP))  # Salida: 1.3

8. Conclusión

En este artículo repasamos los distintos métodos de redondeo en Python. La función round() es práctica, pero tiene limitaciones en cuanto a precisión. Para cálculos exactos, conviene usar Decimal. Además, funciones como math.floor() y math.ceil() permiten redondear siempre hacia abajo o hacia arriba según convenga. Seleccionar el método adecuado según el contexto permite mejorar tanto la precisión como la eficiencia del código.

9. Artículos relacionados y referencias

Para profundizar en el tema, consulta los siguientes recursos:
  1. Documentación oficial de Python – Función round()
    Explica el uso y consideraciones de round(), incluyendo el “Banker’s Rounding”.
    Python Official Documentation
  2. Documentación oficial de Python – Módulo decimal
    Recurso detallado sobre Decimal, manejo de precisión y el uso de quantize().
    Python Decimal Documentation
  3. Artículo sobre redondeo – note.nkmk.me
    Explicación práctica sobre round() y decimal con ejemplos.
    Cómo redondear números en Python
Estos materiales te ayudarán a ampliar tu comprensión sobre el redondeo y el manejo numérico en Python.
侍エンジニア塾