Funzione round () di Python con ESEMPI

Il giro()

Round () è una funzione incorporata disponibile con python. Ti restituirà un numero float che verrà arrotondato alle cifre decimali fornite come input.

Se le cifre decimali da arrotondare non sono specificate, viene considerato come 0 e verrà arrotondato al numero intero più vicino.

In questo tutorial su Python imparerai:

  • Il giro()
  • Sintassi:
  • Quale impatto può avere l'arrotondamento? (Arrotondamento vs Troncamento)
  • Esempio: arrotondamento di numeri in virgola mobile
  • Esempio: arrotondamento di valori interi
  • Esempio: arrotondamento su numeri negativi
  • Esempio: Round Numpy Arrays
  • Esempio: modulo decimale

Sintassi:

round(float_num, num_of_decimals)

Parametri

  • float_num: il numero float da arrotondare.
  • num_of_decimals: (opzionale) il numero di decimali da considerare durante l'arrotondamento. È facoltativo e, se non specificato, il valore predefinito è 0 e l'arrotondamento viene eseguito all'intero più vicino.

Descrizione

Il metodo round () accetta due argomenti

  • il numero da arrotondare e
  • le cifre decimali da considerare durante l'arrotondamento.

Il secondo argomento è facoltativo e il valore predefinito è 0 quando non specificato e, in tal caso, verrà arrotondato al numero intero più vicino e anche il tipo restituito sarà un numero intero.

Quando sono presenti le cifre decimali, ovvero il secondo argomento, verrà arrotondato al numero di posizioni fornite. Il tipo restituito sarà un float.

Se il numero dopo la cifra decimale data

  • > = 5 di + 1 verrà aggiunto al valore finale
  • <5 rispetto al valore finale verrà restituito in quanto spetta alle cifre decimali menzionate.

Valore di ritorno

Restituirà un valore intero se num_of_decimals non viene fornito e un valore float se viene fornito num_of_decimals. Si noti che il valore verrà arrotondato a +1 se il valore dopo il punto decimale è> = 5 altrimenti restituirà il valore in quanto spetta alle cifre decimali menzionate.

Quale impatto può avere l'arrotondamento? (Arrotondamento vs Troncamento)

Il miglior esempio per mostrare l'impatto dell'arrotondamento è per il mercato borsistico. In passato, cioè nell'anno 1982, la Borsa di Vancouver (VSE): usata per troncare i valori delle azioni a tre cifre decimali su ogni scambio.

È stato fatto quasi 3000 volte al giorno. I troncamenti accumulati portano a una perdita di circa 25 punti al mese.

Di seguito è riportato un esempio di troncamento dei valori rispetto all'arrotondamento.

Considera i numeri in virgola mobile generati di seguito come valori di borsa. In questo momento lo sto generando per un intervallo di

1.000.000 di secondi tra 0,01 e 0,05.

Esempi:

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

Per mostrare l'impatto dell'arrotondamento, ho scritto un piccolo pezzo di codice in cui all'inizio è necessario utilizzare i numeri fino a solo 3 decimali, cioè troncando il numero dopo 3 decimali.

Ho il valore totale originale, il totale proveniente da valori troncati e la differenza tra valore originale e troncato.

Sulla stessa serie di numeri, ho utilizzato il metodo round () fino a 3 cifre decimali e ho calcolato la somma e la differenza tra il valore originale e il valore arrotondato.

Ecco l'esempio e l'output

Esempio 1

import randomdef truncate(num):return int(num * 1000) / 1000arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]sum_num = 0sum_truncate = 0for i in arr:sum_num = sum_num + isum_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 = 0sum_truncate1 = 0for i in arr:sum_num1 = sum_num1 + isum_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)

Produzione:

Testing by using truncating upto 3 decimal placesThe original sum is = 29985.958619386867The total using truncate = 29486.057The difference from original - truncate = 499.9016193868665Testing by using round() up to 3 decimal placesThe original sum is = 29985.958619386867The total using round = 29985.912The difference from original - round = 0.04661938686695066

La differenza tra l'originale e dopo il troncamento è 499,9016193868665 e da rotondo è 0,04661938686695066

La differenza sembra essere molto grande e l'esempio mostra come il metodo round () aiuta nel calcolo vicino alla precisione.

Esempio: arrotondamento di numeri in virgola mobile

In questo programma vedremo come arrotondare le parole sui numeri fluttuanti

# 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 >5float_num2 = 10.40 # here the value will be rounded to 10 as after the decimal point the number is 4 that is <=5float_num3 = 10.3456 # here the value will be 10.35 as after the 2 decimal points the value >=5float_num4 = 10.3445 #here the value will be 10.34 as after the 2 decimal points the value is <5print("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))

Produzione:

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

Esempio: arrotondamento di valori interi

Se ti capita di usare round () su un valore intero, ti restituirà semplicemente il numero senza alcuna modifica.

# testing round() on a integernum = 15print("The output is", round(num))

Produzione:

The output is 15

Esempio: arrotondamento su numeri negativi

Vediamo alcuni esempi di come funziona l'arrotondamento sui numeri negativi

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

Produzione:

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

Esempio: Round Numpy Arrays

Come arrotondare gli array numpy in Python?

Per risolvere questo problema, possiamo utilizzare il modulo numpy e utilizzare il metodo numpy.round () o numpy.around (), come mostrato nell'esempio seguente.

Utilizzando numpy.round ()

# testing round()import numpy as nparr = [-0.341111, 1.455098989, 4.232323, -0.3432326, 7.626632, 5.122323]arr1 = np.round(arr, 2)print(arr1)

Produzione:

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

Possiamo anche usare numpy.around (), che ti dà lo stesso risultato mostrato nell'esempio sotto.

Esempio: modulo decimale

Oltre alla funzione round (), python ha un modulo decimale che aiuta a gestire i numeri decimali in modo più accurato.

Il modulo Decimal viene fornito con i tipi di arrotondamento, come mostrato di seguito:

  • ROUND_CEILING: arrotonderà verso l'Infinito,
  • ROUND_DOWN: arrotonda il valore verso zero,
  • ROUND_FLOOR: arrotonderà verso -Infinity,
  • ROUND_HALF_DOWN: arrotonderà al valore più vicino andando verso zero,
  • ROUND_HALF_EVEN: verrà arrotondato al più vicino con il valore che va al numero intero pari più vicino,
  • ROUND_HALF_UP: verrà arrotondato al più vicino con il valore che si allontana da zero
  • ROUND_UP: arrotonderà dove il valore andrà lontano da zero.

In decimale, il metodo quantize () aiuta ad arrotondare a un numero fisso di cifre decimali ed è possibile specificare l'arrotondamento da utilizzare, come mostrato nell'esempio seguente.

Esempio:

Utilizzo dei metodi round () e decimal

import decimalround_num = 15.456final_val = round(round_num, 2)#Using decimal modulefinal_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)

Produzione:

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

Sommario:

  • Round (float_num, Num_of_decimals) è una funzione incorporata disponibile con python. Ti restituirà il numero float che verrà arrotondato alle cifre decimali fornite come input.
  • float_num: il numero float da arrotondare.
  • Num_of_decimals: è il numero di decimali da considerare durante l'arrotondamento.
  • Restituirà un valore intero se num_of_decimals non viene fornito e un valore float se viene fornito num_of_decimals.

Articoli interessanti...