Cómo redondear números en Python [With Examples]

¿Trabajando con tipos de datos numéricos en Python? Sube de nivel aprendiendo las diferentes formas de redondear números en Python.

La mayoría de los conjuntos de datos del mundo real contienen características numéricas y categóricas. Existe una amplia gama de funciones numéricas, desde lecturas de sensores hasta tipos de cambio de divisas, señales biomédicas y más.

Cuando trabaje con valores numéricos, es posible que necesite redondear estos valores a una precisión fija por motivos como:

  • Garantizar un formato coherente
  • Almacenamiento y procesamiento más sencillos

En este tutorial, aprenderemos las diferentes formas de redondear un número a una precisión específica, redondear números hacia arriba y hacia abajo al entero más cercano y mucho más.

Empecemos.

Cómo redondear números usando la función round() incorporada

El método más común para redondear números en Python es usar el método incorporado función redonda (). Empecemos por aprender su sintaxis:

round(num, ndigits)

Aquí,

  • num es el número que quieres redondear
  • ndigits es un parámetro opcional con un valor predeterminado de Ninguno. Es el número de lugares a los que redondear el número. Si ndigits = 2, num se redondea a dos lugares después del punto decimal.
  • La función round() devuelve un número redondeado a precisión de ndigits después del punto decimal.

Ejemplos de uso de la función Python round()

Codifiquemos algunos ejemplos para comprender cómo funciona la función round().

Como se mencionó, ndigits es opcional. Entonces, cuando llamamos a round() solo con el número, el número se redondea al entero más cercano.

number = 7.123456
rounded = round(number)  
print(rounded)
# Output: 7

Ahora tomemos algunos ejemplos en los que especificamos la precisión.

Con ndigits establecido en 2, el número se redondea a dos decimales (décimo lugar):

number = 7.123456
rounded = round(number, 2)  
print(rounded)
# Output: 7.12

Con ndigits establecido en 3, el número se redondea a tres decimales (centésima):

number = 7.123456
rounded = round(number, 3)  
print(rounded)
# Output: 7.123

También puedes usar round() para redondear números negativos:

number = -3.4
rounded = round(number)
print(rounded) 
# Output: -3

Aquí, la función redondea -3,4 a -3, el número entero más cercano.

Redondeo al lugar de decenas y centenas más cercano

¿Sabías que los ndigits también pueden tomar valores negativos?

Sí, puedes llamar a la función round() con valores negativos para ndigits. Cuando lo hace, el redondeo se realiza a la izquierda del punto decimal en lugar de a la derecha.

¿Qué quiere decir esto? Veamos algunos ejemplos.

Cuando establecemos ndigits en -1, el número se redondea a la decena más cercana.

number = 7.123456
rounded = round(number, -1)  
print(rounded)
# Output: 10.0

Y llamar a la función round() con ndigits establecidos en -2 redondea el número 77.123456 a la centena más cercana, que en este caso es 100.0.

number = 77.123456
rounded = round(number, -2)  
print(rounded)
# Output: 100.0

Hasta ahora, la función round() parece seguir los principios generales de redondeo que hemos aprendido en matemáticas en la escuela. Pero ese no es siempre el caso.

Hay algunos limitaciones con punto flotante números. Por lo tanto, es posible que veas algunos resultados inesperados al redondear. Otra advertencia interesante es el redondeo bancario.

¿Qué es el redondeo bancario?

Inicie un REPL de Python y pruebe el siguiente ejemplo:

>>> round(1.5)
2

Vemos que la ronda (1,5) devuelve 2 (como se esperaba). Entonces, ¿qué debería devolver la ronda (2,5)?

>>> round(2.5)
2

Interesante, ¿sí? Tanto la ronda (1,5) como la ronda (2,5) devuelven 2. ¿Pero cómo y por qué?

Internamente, la función de redondeo funciona así: cualquier valor que esté a medio camino entre dos números enteros se redondea al entero par más cercano. Se llama redondeo bancario o la mitad redonda para igualar la estrategia.

Sabemos que la función round() es suficiente para tareas de redondeo simples. Pero a veces es posible que tengas que redondear un número hacia arriba o hacia abajo al entero más cercano.

Asique como haces eso? Aprendamos eso en la siguiente sección.

Cómo redondear números en Python

Para redondear un número al entero más cercano, puedes usar:

Usando math.ceil

La función ceil() (o función techo) funciona así: redondea un número al entero más pequeño que sea mayor que el número.

El siguiente fragmento muestra cómo utilizar la función ceil() para redondear el número 3,2:

import math

number = 3.2
rounded_up = math.ceil(number)
print(rounded_up)  
# Output: 4

Usando el módulo decimal

Hasta ahora, hemos utilizado el tipo de datos flotante incorporado. Pero para determinadas aplicaciones en informática científica y finanzas, necesitamos una precisión mucho mayor. Y para ello, Python viene con el módulo decimal que proporciona:

  • Aritmética de coma flotante más precisa
  • Pruebas de igualdad confiables
  • Control más preciso sobre el nivel de precisión (la precisión predeterminada es 28 lugares)

Para ver el contexto actual, use getcontext() como se muestra:

from decimal import getcontext
current_context = getcontext()
print(current_context)

Debería poder ver la precisión actual y el modo de redondeo, entre otros:

# Output
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, 
capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

Para redondear un número, puede utilizar quantize() especificando:

  • La precisión (0,0 ya que queremos redondear al número entero más cercano) y
  • El modo de redondeo: ROUND_CEILING
from decimal import Decimal, ROUND_CEILING

number = Decimal('3.2')
rounded_up = number.quantize(Decimal('0'), rounding=ROUND_CEILING)
print(rounded_up)  
# Output: 4

Aquí, el número 3,2 se ha redondeado al número entero más cercano, 4.

Cómo redondear números hacia abajo en Python

Ahora, veamos cómo redondear números hacia abajo en Python. De manera similar al proceso de redondeo, podemos usar el módulo matemático o decimal.

Usando math.floor

La función Floor() del módulo matemático funciona así: redondea hacia abajo un número al mayor entero que sea menor que el número.

Tomemos el siguiente ejemplo:

import math

number = 3.8
rounded_down = math.floor(number)
print(rounded_down)  
# Output: 3

Aquí, la función Floor() redondea hacia abajo el número de punto flotante de 3,8 a 3.

Usando el módulo decimal

Para redondear un número hacia abajo, puede usar quantize() configurando el modo de redondeo en ROUND_FLOOR.

from decimal import Decimal, ROUND_FLOOR

number = Decimal('3.8')
rounded_down = number.quantize(Decimal('0'), rounding=ROUND_FLOOR)
print(rounded_down)  
# Output: 3

Como se ve, 3,8 se ha redondeado a la baja a 3.

Errores comunes que se deben evitar al redondear números

Ya hemos visto que la función round() redondea la mitad a par, lo que no siempre es deseable. Existen otros errores comunes que se deben evitar al redondear números en Python:

  • Comparación de igualdad incorrecta: el redondeo de números a menudo introduce errores de redondeo. Si intenta realizar una comparación de igualdad entre un resultado redondeado con otro valor, la verificación de igualdad (casi siempre) fallará debido a la precisión variable. Por lo tanto, trate de evitar comprobaciones de igualdad entre números de coma flotante y números de coma flotante redondeados. Si la comparación es necesaria, introduzca un umbral de tolerancia.
  • Pérdida de información: es posible que desee capturar ciertos datos, como lecturas de sensores en diferentes marcas de tiempo, con alta precisión. Redondear dichos datos a menos decimales da como resultado una pérdida de información y un análisis incorrecto.
  • Redondeo de resultados intermedios: a menudo tendrás que realizar varios pasos como parte del cálculo. Utilice una precisión constante en todos los pasos. Además, evite redondear en los pasos intermedios para evitar que se acumulen los errores de redondeo.

Mejores prácticas para redondear números en Python

Enumeremos algunas de las mejores prácticas a seguir al redondear números en Python:

  • Elija el tipo de datos correcto: elija entre tipos de datos flotantes y decimales según la aplicación. Si necesita realizar aritmética de coma flotante de alta precisión, elija el tipo de datos decimal.
  • Utilice niveles de precisión consistentes: establezca niveles de precisión consistentes para números decimales en todo el programa para evitar errores de redondeo inesperados.
  • Técnicas de redondeo de documentos: en aplicaciones del mundo real que involucran datos como moneda y lecturas de sensores, es importante contar con una técnica de redondeo consistente y documentada.

Terminando

Concluyamos el tutorial con una revisión rápida de lo que hemos aprendido:

  • Puede utilizar la función round() incorporada con esta sintaxis round(num, ndigits). Al utilizar la función round(), debes tener en cuenta la estrategia de redondeo del banquero. Por lo tanto, redondea los números exactamente entre dos números enteros al entero par más cercano.
  • Puede utilizar las funciones ceil() y Floor() del módulo matemático para redondear hacia arriba y hacia abajo un número determinado al entero más cercano, respectivamente.
  • Cuando necesite realizar aritmética de punto flotante de alta precisión, utilice el módulo decimal. Puede redondear números con la precisión y la estrategia de redondeo requeridas.
  • Debe tener en cuenta los errores comunes al redondear números en Python. Estos incluyen la pérdida de información por redondeo, redondeo de resultados en pasos intermedios y uso de precisión diferente en diferentes partes del código.
  • Las mejores prácticas incluyen elegir el tipo de datos correcto según la aplicación y documentar niveles de precisión consistentes.

A continuación, aprenda cómo realizar la división del piso en Python.

¿Te resultó útil este artículo

¡Gracias por tus comentarios!