Para redondear un promedio en Python usa round(promedio, 2) o, si solo lo vas a mostrar, f"{promedio:.2f}". Ten en cuenta que Python redondea los empates al número par (round(2.5) da 2) y que muchos decimales no se guardan exactos, así que round(8.25, 1) da 8.2. Si necesitas el redondeo escolar, donde 8.25 sube a 8.3, usa Decimal con ROUND_HALF_UP.
Sintaxis
round(x, 2) # float redondeado a 2 decimales (empates al par)
f"{x:.2f}" # texto con 2 decimales, mismo criterio
f"{x:,.2f}" # con separador de miles: 1,234,567.89
from decimal import Decimal, ROUND_HALF_UP
Decimal(str(x)).quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
Paso a paso
- Calcula el promedio con todos sus decimales; no redondees los datos antes, salvo que una regla lo exija.
- Decide la regla: ¿empates al par (estándar IEEE, el de Python) o empates hacia arriba (el que se enseña en la escuela y aplican muchas boletas)?
- Para empates al par o si solo vas a mostrar el valor, usa
roundo un f-string. - Para empates hacia arriba, convierte a
Decimaldesde texto y usaquantizeconROUND_HALF_UP.
Ejemplos resueltos
Ejemplo 1: un promedio de 8.25 que «debería» ser 8.3
notas = [8.5, 7.25, 9.0]
p = sum(notas) / len(notas)
print(p)
print(round(p, 2), f"{p:.1f}")
8.25
8.25 8.2
8.25 está justo a la mitad entre 8.2 y 8.3. Python elige el par, 8.2. Si el reglamento de tu escuela dice que de 0.5 en adelante se sube, necesitas el redondeo del ejemplo 3. Las reglas de cada nivel educativo están en cómo sacar el promedio de calificaciones.
Ejemplo 2: el decimal que no es lo que parece
print(round(2.675, 2))
print(Decimal(2.675))
print(round(7.25, 1), round(7.35, 1))
2.67
2.67499999999999982236431605997495353221893310546875
7.2 7.3
2.675 no se puede guardar exacto en binario: en memoria es un poco menos, así que se redondea hacia abajo. Con 7.25 (que sí es exacto en binario) gana la regla del par y queda 7.2; con 7.35, que en memoria es 7.3499…, también baja a 7.3. No es un error de Python: la documentación de round lo advierte.
Ejemplo 3: redondeo escolar con Decimal
from decimal import Decimal, ROUND_HALF_UP
def redondear(x, d=0):
q = Decimal(1).scaleb(-d)
return float(Decimal(str(x)).quantize(q, rounding=ROUND_HALF_UP))
print(redondear(2.675, 2), redondear(2.5), redondear(8.245, 2), redondear(7.25, 1))
2.68 3.0 8.25 7.3
La clave es Decimal(str(x)): str da la representación corta ("2.675"), no el binario largo. Decimal(1).scaleb(-d) construye 0.01 para d=2. Para el promedio del ejemplo 1, redondear(8.25, 1) da 8.3.
Sumas que no dan exacto
import math
print(0.1 + 0.2)
print(sum([0.1] * 10))
print(math.fsum([0.1] * 10))
0.30000000000000004
0.9999999999999999
1.0
Cada suma de float puede perder un poco de precisión. math.fsum compensa esos errores y devuelve la suma correcta; statistics.fmean la usa internamente, por eso fmean([0.1] * 10) da 0.1 exacto mientras que sum([0.1] * 10) / 10 da 0.09999999999999999. Para comparar resultados, nunca uses == con decimales: usa math.isclose(a, b).
Truncar y formatear para México o España
- Truncar en vez de redondear. Algunas instituciones cortan los decimales:
math.floor(8.79 * 10) / 10da 8.7. Para negativos usamath.trunc. - Coma decimal y punto de miles. Python formatea al estilo de México (
1,234,567.89). Para el formato de España, intercambia los separadores:f"{x:,.2f}".replace(",", "X").replace(".", ",").replace("X", ".")da1.234.567,89.
Errores comunes
- Redondear cada dato y luego promediar. Acumula error. Redondea una sola vez, al final, salvo que la regla diga lo contrario.
Decimal(2.675)en lugar deDecimal("2.675"). Pasar elfloatcopia su error binario alDecimal.- Comparar
promedio == 8.3después de calcular. Puede fallar por la representación binaria. Compara el valor redondeado o usamath.isclose. - Creer que NumPy redondea distinto.
np.round(2.5)también da 2.0: usa el mismo criterio de empates al par.
Si calculas promedios escolares y quieres comprobar un resultado sin programar, usa la calculadora de promedio de calificaciones.
Fuentes
- Python Software Foundation, función round. Redondeo al par más cercano y nota sobre round(2.675, 2). Consultado el 11 de noviembre de 2026.
- Python Software Foundation, aritmética de punto flotante. Errores de representación. Consultado el 11 de noviembre de 2026.