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.

  • ๐Ÿ”˜ Sintassi: round(number, ndigits) accetta il valore da arrotondare e un numero di cifre facoltativo che per impostazione predefinita รจ zero.
  • โ˜‘๏ธ Tipo di ritorno: Omettendo ndigits si ottiene un numero intero, mentre fornendolo si ottiene un numero decimale.
  • โœ… Arrotondamento del banchiere: I valori intermedi vengono arrotondati al numero pari piรน vicino, quindi round(2.5) restituisce 2.
  • ๐Ÿงช Numeri negativi: L'arrotondamento si applica anche ai numeri negativi: -2.8 diventa -3 e -1.5 diventa -2.
  • ๏ธ Strumenti di precisione: Il modulo decimal e la funzione round() di NumPy gestiscono l'arrotondamento a precisione fissa e quello degli array.
  • ๐Ÿค– Flussi di lavoro basati sull'intelligenza artificiale: Il codice di apprendimento automatico arrotonda metriche, probabilitร  e pesi per una registrazione e una reportistica piรน pulite.

Python funzione round()

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

DOMANDE FREQUENTI

No. Python 3 utilizza l'arrotondamento per eccesso (arrotondamento bancario) per i casi di paritร , quindi round(0.5) รจ 0, round(2.5) รจ 2 e round(3.5) รจ 4. Questo riduce la distorsione cumulativa.

Poichรฉ 2.675 non puรฒ essere memorizzato esattamente in virgola mobile binaria, viene effettivamente memorizzato come circa 2.6749999999999998, quindi round() arrotonda per difetto. Per risultati esatti, utilizzare decimal.Decimal('2.675').

Utilizza il modulo math: math.ceil(x) arrotonda sempre per eccesso, math.floor(x) arrotonda sempre per difetto e int(x) tronca verso lo zero. round() di per sรฉ non puรฒ imporre una direzione fissa.

Passa un secondo argomento negativo: round(12345, -1) restituisce 12340, round(12345, -2) restituisce 12300 e round(12345, -3) restituisce 12000. Le cifre negative vengono arrotondate a sinistra della virgola.

round(x, 2) modifica il valore utilizzato nei calcoli successivi, mentre f'{x:.2f}' formatta solo la visualizzazione e mantiene il numero intatto. Utilizzare round() per i calcoli, f-string per l'output.

No. Numbers sono immutabili, quindi round() restituisce un nuovo valore senza modificarne l'input. Assegnando un valore, ad esempio, result = round(3.14159, 2); la variabile originale mantiene la precisione completa.

Il codice di apprendimento automatico arrotonda i valori di accuratezza, perdita e probabilitร  per ottenere log leggibili e per associare le previsioni alle etichette di classe. Mantiene la precisione completa per i calcoli del gradiente e arrotonda solo le metriche finali visualizzate.

Sรฌ. Gli assistenti basati sull'IA, come GitHub Copilot, completano automaticamente round(), np.round() e l'arrotondamento decimale da un commento o dal nome di una funzione, e gli strumenti agentici rifattorizzano la formattazione manuale in chiamate round(), sebbene la precisione scelta necessiti ancora di revisione.

Riassumi questo post con: