Python Funzione round() con ESEMPI
⚡ Riepilogo intelligente
Python round() è una funzione integrata che restituisce un valore in virgola mobile o intero arrotondato a un numero specificato di cifre decimali, utilizzando l'arrotondamento bancario per risolvere i casi di parità, arrotondando per eccesso alla cifra pari più vicina.

Che cos'è la funzione round() in Python?
Python round() è una funzione integrata disponibile con PythonRestituirà un numero decimale arrotondato al numero di cifre decimali specificato in input.
Se non vengono specificate le cifre decimali da arrotondare, il valore viene considerato pari a 0 e l'arrotondamento avviene all'intero più vicino.
Sintassi
round(float_num, num_of_decimals)
Scheda Sintetica
- numero_float: Il numero decimale da arrotondare.
- numero_di_decimali: (facoltativo) Il numero di cifre 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, se non specificato, assume valore predefinito 0; in tal caso, verrà arrotondato all'intero più vicino e il tipo di ritorno sarà anch'esso un intero.
Quando sono presenti le cifre decimali, ovvero il secondo argomento, verrà arrotondato al numero di cifre indicato. Il tipo restituito sarà float.
Se il numero dopo la virgola indicato è:
- Se il valore è maggiore o uguale a 5, al valore finale verrà aggiunto +1.
- Se < 5, il valore finale verrà restituito così com'è, fino alle cifre decimali indicate.
Valore di ritorno
Restituirà un valore intero se il parametro num_of_decimals non è specificato e un valore decimale se il parametro num_of_decimals è specificato. Si noti che il valore verrà arrotondato a +1 se la cifra dopo la virgola è maggiore o uguale a 5, altrimenti restituirà il valore così com'è, fino al numero di cifre decimali specificato.
Quanto impatto può avere l'arrotondamento? (Arrotondamento vs troncamento)
Il miglior esempio per mostrare l'impatto dell'arrotondamento è il mercato azionario. In passato, cioè nell'anno 1982, il Borsa di Vancouver (VSE) utilizzato per troncare i valori azionari a tre cifre decimali per ogni transazione.
Questa operazione veniva eseguita quasi 3000 volte al giorno. L'accumulo di troncamenti ha comportato 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 azionari. Al momento, li 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 frammento di codice in cui, inizialmente, si utilizzano i numeri fino a sole 3 cifre decimali, ovvero si tronca il numero dopo 3 cifre decimali.
Dispongo del valore totale originale, del totale risultante dai valori troncati e della differenza tra il valore originale e quello troncato.
Sullo stesso insieme 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 il risultato.
esempio 1
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)
Produzione:
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 differenza tra il valore originale e quello troncato è 499.9016193868665, e da round(), è 0.04661938686695066.
La differenza sembra essere molto grande, e l'esempio mostra come il metodo round() aiuti a calcolare con una precisione vicina a quella reale.
Esempio: arrotondamento mobile Numbers
In questo programma vedremo come funziona l'arrotondamento per i numeri in virgola mobile.
# 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))
Produzione:
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
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 integer num = 15 print("The output is", round(num))
Produzione:
The output is 15
Esempio: arrotondamento al negativo Numbers
Vediamo alcuni esempi di come funziona l'arrotondamento per i numeri negativi.
# testing round() num = -2.8 num1 = -1.5 print("The value after rounding is", round(num)) print("The value after rounding is", round(num1))
Produzione:
C:\pythontest>python testround.py The value after rounding is -3 The value after rounding is -2
Esempio: Arrotondare gli array NumPy
Come si arrotonda NumPy? matrici in Python?
Per risolvere questo problema, possiamo utilizzare il modulo NumPy e il metodo numpy.round() o numpy.around(), come mostrato nell'esempio seguente.
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)
Produzione:
C:\pythontest>python testround.py [-0.34 1.46 4.23 -0.34 7.63 5.12]
Possiamo anche usare numpy.around(), che fornisce lo stesso risultato di numpy.round() mostrato sopra.
Esempio: modulo decimale
Oltre alla funzione round(), Python Dispone di un modulo decimale che aiuta a gestire i numeri decimali con maggiore precisione.
Il modulo Decimale offre diverse opzioni di arrotondamento, come mostrato di seguito:
- SOFFITTO ROTONDO: tenderà all'infinito.
- ARROTONDA PER DIFETTO: arrotonderà il valore verso zero.
- PAVIMENTO ROTONDO: si arrotonderà verso -Infinito.
- ROTONDO_MEZZO_DI_SOTTO: Verrà arrotondato al valore più vicino tendente allo zero.
- ROUND_SELF_EVEN: Verrà arrotondato al valore più vicino, partendo dall'intero pari più vicino.
- ARROTONDARE_MEZZO_PER_ALTO: Verrà arrotondato al valore più vicino, allontanandosi dallo zero.
- RIEPILOGO: arrotonderà dove il valore si discosterà 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: Utilizzando round() e metodi decimali
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)
Produzione:
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
