Cómo redondear un número en Python (función round() y decimal)

Aprenda a redondear números de punto flotante en Python. Comprenda el redondeo de Banker, la precisión decimal personalizada y el formato flotante para su visualización.

Pruebe esta solución en el Editor

Descripción general

La aritmética de punto flotante en las computadoras a veces puede generar problemas de precisión inesperados debido a la forma en que los sistemas binarios almacenan decimales (por ejemplo, `0.1 + 0.2` se evalúa como `0.30000000000000004`). Al presentar números a los usuarios o preparar métricas, redondear números es un requisito común. Python proporciona varias formas de lograrlo.

La herramienta principal es la función incorporada `redondo (número, dígitos)`. Se necesita un número y un conteo de precisión opcional. Si se omite "ndigits", se redondea al número entero más cercano. Si se proporciona "ndigits", se redondea a ese número de decimales.

Una propiedad clave de la función `round()` de Python es que utiliza el "redondeo bancario" (redondear la mitad a par). Cuando un número está exactamente a medio camino entre dos números enteros (por ejemplo, `2.5` o `3.5`), Python redondea al número *par* más cercano. Esto significa que "redondo (2.5)" es "2" y "redondo (3.5)" es "4". Si bien es matemáticamente justo en conjuntos de datos grandes para evitar un sesgo al alza, para cálculos financieros precisos debes utilizar las herramientas de cuantificación del módulo "decimal".

Código y salida de ejecución

Este script demuestra el redondeo de flotantes utilizando la función de redondeo incorporada, ejemplos de redondeo bancario y el módulo decimal.

round_numbers.py
Pruébelo en el editor
from decimal import Decimal, ROUND_HALF_UP

val = 3.14159

# 1. Round to nearest integer
print("Nearest Integer:", round(val))

# 2. Round to 2 decimal places
print("Two decimals:", round(val, 2))

# 3. Banker's Rounding demonstration (rounds to nearest even)
print("round(2.5):", round(2.5)) # Nearest even is 2
print("round(3.5):", round(3.5)) # Nearest even is 4

# 4. Math rounding up (Traditional rounding) using decimal module
amount = Decimal("2.5")
rounded_up = amount.quantize(Decimal("1"), rounding=ROUND_HALF_UP)
print("Decimal ROUND_HALF_UP (2.5):", rounded_up)
Salida terminal
Nearest Integer: 3
Two decimals: 3.14
round(2.5): 2
round(3.5): 4
Decimal ROUND_HALF_UP (2.5): 3

Implementación paso a paso

  • Llame a la función integrada round(number) para redondear un flotante al entero entero más cercano.
  • Pase un segundo argumento (por ejemplo, round(num, 2)) para especificar el número de decimales que se conservarán.
  • Utilice el módulo decimal con ROUND_HALF_UP para cálculos de redondeo financiero estricto.

Preguntas frecuentes

¿Por qué round(2.5) devuelve 2 en lugar de 3 en Python?

Python utiliza el redondeo de Banker, que redondea la mitad de los números al entero par más cercano. Esto reduce el sesgo estadístico (redondear la mitad de los números siempre provoca una ligera tendencia ascendente en conjuntos de datos grandes).

¿Cómo redondeo un número siempre hacia arriba o siempre hacia abajo?

Importe el módulo matemático y use math.ceil(x) para redondear hacia arriba al siguiente número entero, o math.floor(x) para redondear hacia abajo al número entero anterior.

Temas relacionados

Recursos recomendados de Python

Amplíe sus conocimientos con tutoriales interactivos relacionados, hojas de trucos y comparaciones de códigos.