Cómo redondear un promedio en Python

Por el equipo de promedio.net · Actualizado el

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

  1. Calcula el promedio con todos sus decimales; no redondees los datos antes, salvo que una regla lo exija.
  2. 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)?
  3. Para empates al par o si solo vas a mostrar el valor, usa round o un f-string.
  4. Para empates hacia arriba, convierte a Decimal desde texto y usa quantize con ROUND_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

Errores comunes

Si calculas promedios escolares y quieres comprobar un resultado sin programar, usa la calculadora de promedio de calificaciones.

Fuentes

  1. 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.
  2. Python Software Foundation, aritmética de punto flotante. Errores de representación. Consultado el 11 de noviembre de 2026.