Python función round() con EJEMPLOS

Ronda()

Round() es una función incorporada disponible con Python. Le devolverá un número flotante que se redondeará a los decimales que se proporcionan como entrada.

Si no se especifican los decimales a redondear, se considera como 0 y se redondeará al entero más cercano.

Sintaxis

round(float_num, num_of_decimals)

parámetros

  • float_num: el número flotante que se va a redondear.
  • num_of_decimals: (opcional) La cantidad de decimales que se deben tener en cuenta al redondear. Es opcional y, si no se especifica, el valor predeterminado es 0 y el redondeo se realiza al número entero más cercano.

Descripción

El método round() toma dos argumentos.

  • el número a redondear y
  • los decimales que debe considerar al redondear.

El segundo argumento es opcional y el valor predeterminado es 0 cuando no se especifica; en tal caso, se redondeará al entero más cercano y el tipo de retorno también será un entero.

Cuando los lugares decimales, es decir, el segundo argumento, estén presentes, se redondeará al número de lugares indicados. El tipo de retorno será flotante.

Si el número después del decimal dado

  • >=5 que + 1 se sumará al valor final
  • <5 que el valor final devolverá ya que está hasta los decimales mencionados.

Valor de retorno

Devolverá un valor entero si no se proporciona el número de decimales y un valor flotante si se proporciona el número de decimales. Tenga en cuenta que el valor se redondeará a +1 si el valor después del punto decimal es >=5; de lo contrario, devolverá el valor tal como está hasta los decimales mencionados.

¿Qué impacto puede tener el redondeo? (Redondeo versus truncamiento)

El mejor ejemplo para mostrar el impacto del redondeo es el del mercado bursátil. En el pasado, es decir en el año 1982, el Bolsa de Valores de Vancouver (VSE): se utiliza para truncar los valores de las acciones a tres decimales en cada operación.

Se hacía casi 3000 veces al día. Los truncamientos acumulados provocan una pérdida de alrededor de 25 puntos por mes.

A continuación se muestra un ejemplo de truncamiento de valores versus redondeo.

Considere los números de punto flotante generados a continuación como valores de acciones. En este momento lo estoy generando para una variedad de

1,000,000 segundos entre 0.01 y 0.05.

Ejemplos:

arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]

Para mostrar el impacto del redondeo, escribí un pequeño fragmento de código en el que al principio debes usar los números hasta solo 3 decimales, es decir, truncar el número después de 3 decimales.

Tengo el valor total original, el total proveniente de valores truncados y la diferencia entre el valor original y el truncado.

En el mismo conjunto de números, he estado usando el método round() hasta 3 decimales y calculando la suma y la diferencia entre el valor original y el valor redondeado.

Aquí están el ejemplo y el resultado.
Ejemplo

import random

def truncate(num):
    return int(num * 1000) / 1000

arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]
sum_num = 0
sum_truncate = 0
for i in arr:
    sum_num = sum_num + i        
    sum_truncate = truncate(sum_truncate + i)
    
print("Testing by using truncating upto 3 decimal places")
print("The original sum is = ", sum_num)
print("The total using truncate = ", sum_truncate)
print("The difference from original - truncate = ", sum_num - sum_truncate)

print("\n\n")
print("Testing by using round() upto 3 decimal places")
sum_num1 = 0
sum_truncate1 = 0
for i in arr:
    sum_num1 = sum_num1 + i        
    sum_truncate1 = round(sum_truncate1 + i, 3)


print("The original sum is =", sum_num1)
print("The total using round = ", sum_truncate1)
print("The difference from original - round =", sum_num1 - sum_truncate1)

Salida:

Testing by using truncating upto 3 decimal places
The original sum is =  29985.958619386867
The total using truncate =  29486.057
The difference from original - truncate =  499.9016193868665



Testing by using round() up to 3 decimal places
The original sum is = 29985.958619386867
The total using round =  29985.912
The difference from original - round = 0.04661938686695066

La diferencia entre original y después de truncar es 499.9016193868665, y de redondo, es 0.04661938686695066

La diferencia parece ser muy grande y el ejemplo muestra cómo el método round() ayuda a realizar cálculos con una precisión cercana.

Ejemplo: flotación de redondeo Numbers

En este programa veremos cómo redondear palabras en números flotantes.

# testing round() 

float_num1 = 10.60 # here the value will be rounded to 11 as after the decimal point the number is 6 that is >5 

float_num2 = 10.40 # here the value will be rounded to 10 as after the decimal point the number is 4 that is <=5

float_num3 = 10.3456 # here the value will be 10.35 as after the 2 decimal points the value >=5 

float_num4 = 10.3445 #here the value will be 10.34 as after the 2 decimal points the value is <5 

print("The rounded value without num_of_decimals is :", round(float_num1))
print("The rounded value without num_of_decimals is :", round(float_num2))
print("The rounded value with num_of_decimals as 2 is :", round(float_num3, 2))
print("The rounded value with num_of_decimals as 2 is :", round(float_num4, 2))

Salida:

The rounded value without num_of_decimals is : 11
The rounded value without num_of_decimals is : 10
The rounded value with num_of_decimals as 2 is : 10.35
The rounded value with num_of_decimals as 2 is : 10.34

Ejemplo: redondear valores enteros

Si utiliza round() en un valor entero, simplemente le devolverá el número sin ningún cambio.

# testing round() on a integer

num = 15

print("The output is", round(num))

Salida:

The output is 15

Ejemplo: redondeo a negativo Numbers

Veamos algunos ejemplos de cómo funciona el redondeo de números negativos.

# testing round()

num = -2.8
num1 = -1.5
print("The value after rounding is", round(num))
print("The value after rounding is", round(num1))

Salida:

C:\pythontest>python testround.py
The value after rounding is -3
The value after rounding is -2

Ejemplo: matrices redondas y numerosas

Cómo redondear números matrices en Python?

Para resolver esto, podemos hacer uso del módulo numpy y usar el método numpy.round() o numpy.around(), como se muestra en el siguiente ejemplo.

Usando numpy.round()

# testing round()
import numpy as np

arr = [-0.341111, 1.455098989, 4.232323, -0.3432326, 7.626632, 5.122323]

arr1 = np.round(arr, 2)

print(arr1)

Salida:

C:\pythontest>python testround.py
[-0.34  1.46  4.23 -0.34  7.63  5.12]

También podemos usar numpy.around(), que le da el mismo resultado que se muestra en el siguiente ejemplo.

Ejemplo: módulo decimal

Además de la función round(), Python tiene un módulo decimal que ayuda a manejar números decimales con mayor precisión.

El módulo Decimal viene con tipos de redondeo, como se muestra a continuación:

  • ROUND_CEILING: se redondeará hacia el Infinito,
  • ROUND_DOWN: redondeará el valor hacia cero,
  • ROUND_FLOOR: se redondeará hacia -Infinito,
  • ROUND_HALF_DOWN: redondeará al valor más cercano yendo hacia cero,
  • ROUND_HALF_EVEN: redondeará al más cercano y el valor irá al entero par más cercano.
  • ROUND_HALF_UP: redondeará al valor más cercano alejándose de cero
  • ROUND_UP: redondeará donde el valor se alejará de cero.

En decimal, el método quantize() ayuda a redondear a un número fijo de decimales y puede especificar el redondeo que se utilizará, como se muestra en el siguiente ejemplo.
Ejemplo:
Usando métodos round() y decimal

import  decimal 
round_num = 15.456

final_val = round(round_num, 2)

#Using decimal module
final_val1 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_CEILING)
final_val2 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_DOWN)
final_val3 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_FLOOR)
final_val4 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_DOWN)
final_val5 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_EVEN)
final_val6 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_UP)
final_val7 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP)

print("Using round()", final_val)
print("Using Decimal - ROUND_CEILING ",final_val1)
print("Using Decimal - ROUND_DOWN ",final_val2)
print("Using Decimal - ROUND_FLOOR ",final_val3)
print("Using Decimal - ROUND_HALF_DOWN ",final_val4)
print("Using Decimal - ROUND_HALF_EVEN ",final_val5)
print("Using Decimal - ROUND_HALF_UP ",final_val6)
print("Using Decimal - ROUND_UP ",final_val7)

Salida:

Using round() 15.46
Using Decimal - ROUND_CEILING  15.46
Using Decimal - ROUND_DOWN  15.45
Using Decimal - ROUND_FLOOR  15.45
Using Decimal - ROUND_HALF_DOWN  15.46
Using Decimal - ROUND_HALF_EVEN  15.46
Using Decimal - ROUND_HALF_UP  15.46
Using Decimal - ROUND_UP  15.46

Resum

  • Round(float_num, Num_of_decimals) es una función incorporada disponible con Python. Le devolverá el número flotante que se redondeará a los decimales que se proporcionan como entrada.
  • float_num: el número flotante que se va a redondear.
  • Num_of_decimals: Es el número de decimales a considerar al redondear.
  • Devolverá un valor entero si no se proporciona el número de decimales y un valor flotante si se proporciona el número de decimales.