¿Cómo redondear números en Python?

Redondear un número significa simplificar el número manteniendo su valor intacto pero más cerca del siguiente número. 
Ejemplo: Si queremos redondear un número, digamos 3,5. Se redondeará al número entero más próximo, que es 4. Sin embargo, el número 3,74 se redondeará a un decimal para dar 3,7. 

Método 1: Uso de la función round() integrada .
En Python hay una función round() incorporada que redondea un número al número dado de dígitos. La función round() acepta dos argumentos numéricos, n y n dígitos y luego devuelve el número n después de redondearlo a n dígitos. Si no se proporciona el número de dígitos para el redondeo, la función redondea el número dado n al entero más cercano. 

Sintaxis: round(número, número de dígitos)

Parámetros: 

  • número: El número a redondear
  • número de dígitos (opcional): el número de dígitos al que se redondeará el número dado

Ejemplo: 

python3

# For integers
print(round(11))
  
# For floating point
print(round(22.7))  
  
# if the second parameter is present
  
# when the (ndigit+1)th digit is =5 
print(round(4.465, 2)) 
    
# when the (ndigit+1)th digit is >=5 
print(round(4.476, 2))   
    
# when the (ndigit+1)th digit is <5 
print(round(4.473, 2))

Producción: 

11
23
4.46
4.48
4.47

Método 2: Usar el concepto de truncamiento .
El truncamiento es uno de los métodos más simples para redondear un número que consiste en truncar un número a un número determinado de dígitos. En esta función, cada dígito después de una posición determinada se reemplaza con 0. La función truncar() se puede usar con números positivos y negativos. 

La función de truncamiento se puede implementar de la siguiente manera:

  • Multiplicar el número por 10^p (10 elevado a la p-ésima potencia) para desplazar el punto decimal p lugares a la derecha.
  • Tomando la parte entera de ese nuevo número usando int().
  • Desplazar el lugar decimal p lugares hacia la izquierda dividiendo por 10 ^ p.

Implementación del concepto de truncamiento utilizando la función definida por el usuario truncate(): 

python3

# defining truncate function
# second argument defaults to 0
# so that if no argument is passed 
# it returns the integer part of number
  
def truncate(n, decimals = 0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
  
print(truncate(16.5))
print(truncate(-3.853, 1))
print(truncate(3.815, 2))
  
# we can truncate digits towards the left of the decimal point
# by passing a negative number.
print(truncate(346.8, -1))
print(truncate(-2947.48, -3))

Producción: 

16.0
-3.8
3.81
340.0
-2000.0

Método 3: Usando Matemáticas . funciones ceil() y Math.floor() .
Math.ceil(): Esta función devuelve el entero más cercano que es mayor o igual a un número dado. 
Math.floor(): Esta función devuelve el entero más cercano menor o igual a un número dado. 
Ejemplo:

python3

# import math library
import math
  
# ceil value for positive
# decimal number
print(math.ceil(4.2))
  
# ceil value for negative
# decimal number
print(math.ceil(-0.5))
  
# floor value for decimal 
# and negative number
print(math.floor(2.2))
print(math.floor(-0.5))

Producción: 

5
0
2
-1

Método 3: Uso del concepto de redondeo .
En Redondeo hacia arriba, un número se redondea hacia arriba a un número específico de dígitos. 
 

La función de redondeo se puede implementar de la siguiente manera: 

  • Primero, el punto decimal en n se desplaza el número correcto de lugares a la derecha al multiplicar n por 10 ** decimales.
  • El nuevo valor se redondea al entero más cercano usando math.ceil()
  • Finalmente, el punto decimal se desplaza hacia la izquierda dividiendo por 10 ** decimales.

Implementación del concepto de redondeo utilizando la función definida por el usuario round_up():

python3

# import math library
import math
  
# define a function for 
# round_up
def round_up(n, decimals = 0): 
    multiplier = 10 ** decimals 
    return math.ceil(n * multiplier) / multiplier
  
# passing positive values
print(round_up(2.1))
print(round_up(2.23, 1))
print(round_up(2.543, 2))
  
# passing negative values
print(round_up(22.45, -1))
print(round_up(2352, -2))

Producción: 

3.0
2.3
2.55
30.0
2400.0

Podemos seguir el diagrama a continuación para comprender el redondeo hacia arriba y el redondeo hacia abajo. Redondea hacia arriba a la derecha y hacia abajo a la izquierda. 
 

Understanding Rounding Up and Rounding Down

Redondear hacia arriba siempre redondea un número a la derecha en la recta numérica y redondear hacia abajo siempre redondea un número a la izquierda en la recta numérica. 
Método 5: Uso del concepto de redondeo hacia abajo .

En Redondeo hacia abajo, un número se redondea hacia abajo a un número específico de dígitos. 

La función de redondeo hacia abajo se puede implementar de la siguiente manera: 

  • Primero, el punto decimal en n se desplaza el número correcto de lugares a la derecha al multiplicar n por 10 ** decimales.
  • El nuevo valor se redondea al entero más cercano usando math.floor().
  • Finalmente, el punto decimal se desplaza hacia la izquierda dividiendo por 10 ** decimales.

Implementación del concepto de redondeo a la baja utilizando la función definida por el usuario round_down():

python3

import math
  
# defining a function for
# round down.
def round_down(n, decimals=0):
    multiplier = 10 ** decimals
    return math.floor(n * multiplier) / multiplier
  
# passing different values to function
print(round_down(2.5))
print(round_down(2.48, 1))
print(round_down(-0.5))

Producción: 

2.0
2.4
-1.0

Método 5: Uso del concepto de sesgo de redondeo .
El concepto de simetría introduce la noción de sesgo de redondeo, que describe cómo afecta el redondeo a los datos numéricos en un conjunto de datos. 
La estrategia de redondeo tiene un sesgo de redondeo hacia el infinito positivo, ya que el valor siempre se redondea hacia arriba en la dirección del infinito positivo. De manera similar, la estrategia de redondeo hacia abajo tiene un sesgo de redondeo hacia el infinito negativo. La estrategia de truncamiento tiene un sesgo de redondeo hacia el infinito negativo en valores positivos y un sesgo de redondeo hacia el infinito positivo para valores negativos. Se dice que las funciones de redondeo con este comportamiento tienen un sesgo de redondeo hacia cero, en general. 

a) Concepto de redondeo a la mitad .
El redondeo a la mitad redondea todos los números al número más cercano con la precisión especificada y rompe los empates al redondear. 
La estrategia de redondeo a la mitad se implementa desplazando el punto decimal a la derecha el número de lugares deseado. En este caso, tendremos que determinar si el dígito después del punto decimal desplazado es menor o mayor que igual a 5. 
Podemos agregar 0.5 al valor desplazado y luego redondearlo hacia abajo con la función math.floor(). 

Implementación de la función round_half_up(): 

python3

import math
  
# defining round_half_up
  
def round_half_up(n, decimals=0):
    multiplier = 10 ** decimals
    return math.floor(n * multiplier + 0.5) / multiplier
  
# passing different values to the function
  
print(round_half_up(1.28, 1))
print(round_half_up(-1.5))
print(round_half_up(-1.225, 2))

Producción: 

1.3
-1.0
-1.23

b) Concepto de redondeo de la mitad hacia abajo.
Esto redondea al número más cercano de manera similar al método de redondeo a la mitad, la diferencia es que rompe los empates al redondear al menor de los dos números. La estrategia de redondeo a la mitad hacia abajo se implementa reemplazando math.floor() en la función round_half_up() con math.ceil() y luego restando 0.5 en lugar de sumar. 

Implementación de la función round_half_down(): 

python3

# import math library
import math
  
# defining a function
# for round_half_down
def round_half_down(n, decimals=0):
    multiplier = 10 ** decimals
    return math.ceil(n * multiplier - 0.5) / multiplier
  
# passing different values to the function
print(round_half_down(2.5))
print(round_half_down(-2.5))
print(round_half_down(2.25, 1))

Producción: 

2.0
-3.0
2.2

Método 6: redondeando la mitad lejos de cero.
En Redondear la mitad lejos de cero, lo que debemos hacer es comenzar, como de costumbre, desplazando el punto decimal hacia la derecha un número determinado de lugares y luego notar el dígito (d) inmediatamente a la derecha del lugar decimal en el nuevo número. Hay cuatro casos para considerar:

  • Si n es positivo y d >= 5, redondea hacia arriba
  • Si n es positivo y d = 5, redondea hacia abajo
  • Si n es negativo y d >= 5, redondea hacia abajo
  • Si n es negativo y d < 5, redondea hacia arriba

Después de redondear según las reglas mencionadas anteriormente, podemos desplazar el lugar decimal hacia la izquierda. 

  • Redondeo de la mitad a par: hay una forma de mitigar el sesgo de redondeo mientras redondeamos valores en un conjunto de datos. Simplemente podemos redondear los empates al número par más cercano con la precisión deseada. La estrategia de redondeo de la mitad a par es la estrategia utilizada por la función round() integrada de Python. La clase decimal proporciona soporte para aritmética de coma flotante decimal redondeada correctamente. Esto ofrece varias ventajas sobre el tipo de datos flotante. La estrategia de redondeo predeterminada en el módulo decimal es ROUND_HALF_EVEN.

Ejemplo: 

python3

# import Decimal function from 
# decimal library
from decimal import Decimal
print(Decimal("0.1"))
print(Decimal(0.1))
  
# Rounding a Decimal number is
# done with the .quantize() function
# "1.0" in .quantize() determines the
# number of decimal places to round the number
print(Decimal("1.65").quantize(Decimal("1.0")))
print(Decimal("1.675").quantize(Decimal("1.00")))

Producción: 

0.1
0.1000000000000000055511151231257827021181583404541015625
1.6
1.68

Publicación traducida automáticamente

Artículo escrito por ashishguru9803 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *