Come arrotondare i numeri in Python [With Examples]

Lavori con tipi di dati numerici in Python? Sali di livello imparando i diversi modi per arrotondare i numeri in Python.

La maggior parte dei set di dati del mondo reale contiene caratteristiche numeriche e categoriali. Esiste un’ampia gamma di caratteristiche numeriche, dalle letture dei sensori ai tassi di cambio, ai segnali biomedici e altro ancora.

Quando si lavora con valori numerici, potrebbe essere necessario arrotondare questi valori a una precisione fissa per motivi quali:

  • Garantire un formato coerente
  • Archiviazione ed elaborazione più semplici

In questo tutorial impareremo i diversi modi per arrotondare un numero a una precisione specifica, arrotondare per eccesso e per difetto i numeri all’intero più vicino e molto altro ancora.

Iniziamo.

Come arrotondare i numeri utilizzando la funzione incorporata round()

Il metodo più comune per arrotondare i numeri in Python è utilizzare il metodo integrato funzione round(). Iniziamo imparando la sua sintassi:

round(num, ndigits)

Qui,

  • num è il numero che vuoi arrotondare
  • ndigits è un parametro facoltativo con un valore predefinito pari a None. È il numero di posizioni a cui arrotondare il numero. Se ndigits = 2, num viene arrotondato a due posizioni dopo la virgola decimale.
  • La funzione round() restituisce un numero arrotondato alla precisione delle cifre dopo il punto decimale.

Python round() Esempi di utilizzo della funzione

Codifichiamo alcuni esempi per capire come funziona la funzione round().

Come accennato, ndigits è facoltativo. Pertanto, quando chiamiamo round() solo con il numero, il numero viene arrotondato all’intero più vicino.

number = 7.123456
rounded = round(number)  
print(rounded)
# Output: 7

Ora prendiamo alcuni esempi in cui specifichiamo la precisione.

Con ndigits impostato su 2, il numero viene arrotondato a due cifre decimali (decimo posto):

number = 7.123456
rounded = round(number, 2)  
print(rounded)
# Output: 7.12

Con ndigits impostato a 3, il numero viene arrotondato alla terza cifra decimale (centesimo posto):

number = 7.123456
rounded = round(number, 3)  
print(rounded)
# Output: 7.123

Puoi usare round() anche per arrotondare i numeri negativi:

number = -3.4
rounded = round(number)
print(rounded) 
# Output: -3

In questo caso la funzione arrotonda -3,4 a -3, il numero intero più vicino.

Arrotondamento alle decine e alle centinaia più vicine

Sapevi che gli ndigit possono assumere anche valori negativi?

Sì, puoi chiamare la funzione round() con valori negativi per ndigits. In questo caso l’arrotondamento avviene a sinistra della virgola decimale invece che a destra.

Cosa significa questo? Vediamo alcuni esempi.

Quando impostiamo ndigits su -1, il numero viene arrotondato alle decine più vicine.

number = 7.123456
rounded = round(number, -1)  
print(rounded)
# Output: 10.0

E chiamando la funzione round() con ndigits impostato su -2 arrotonda il numero 77.123456 al centinaio più vicino, che in questo caso è 100.0.

number = 77.123456
rounded = round(number, -2)  
print(rounded)
# Output: 100.0

Finora, la funzione round() sembra seguire i principi generali dell’arrotondamento che abbiamo imparato a scuola. Ma non è sempre così.

Ci sono alcuni limitazioni con virgola mobile numeri. Pertanto potresti vedere alcuni risultati inaspettati durante l’arrotondamento. Un altro avvertimento interessante riguarda l’arrotondamento del banchiere.

Cos’è l’arrotondamento bancario?

Avvia un REPL Python e prova il seguente esempio:

>>> round(1.5)
2

Vediamo che round(1.5) restituisce 2 (come previsto). Quindi cosa dovrebbe restituire round(2.5)?

>>> round(2.5)
2

Interessante, sì? Sia round(1.5) che round(2.5) restituiscono 2. Ma come e perché?

Internamente, la funzione round funziona in questo modo: qualsiasi valore che si trova a metà strada tra due numeri interi viene arrotondato all’intero pari più vicino. Questo è chiamato arrotondamento del banchiere o la metà del giro per pareggiare la strategia.

Sappiamo che la funzione round() è sufficiente per semplici operazioni di arrotondamento. Ma a volte potrebbe essere necessario arrotondare per eccesso o per difetto un numero all’intero più vicino.

Allora come puoi farlo? Lo impareremo nella prossima sezione.

Come arrotondare i numeri in Python

Per arrotondare un numero all’intero più vicino, è possibile utilizzare:

Utilizzando math.ceil

La funzione ceil() (o funzione soffitto) funziona in questo modo: arrotonda un numero al più piccolo intero maggiore del numero.

Il seguente frammento mostra come utilizzare la funzione ceil() per arrotondare il numero 3.2:

import math

number = 3.2
rounded_up = math.ceil(number)
print(rounded_up)  
# Output: 4

Utilizzo del modulo decimale

Finora abbiamo utilizzato il tipo di dati float integrato. Ma per alcune applicazioni nel campo dell’informatica scientifica e della finanza abbiamo bisogno di una precisione molto più elevata. E per questo, Python viene fornito con il modulo decimal che fornisce:

  • Aritmetica in virgola mobile più precisa
  • Test di uguaglianza affidabili
  • Controllo più preciso sul livello di precisione (la precisione predefinita è 28 posizioni)

Per vedere il contesto corrente, utilizzando getcontext() come mostrato:

from decimal import getcontext
current_context = getcontext()
print(current_context)

Dovresti essere in grado di vedere la precisione corrente e la modalità di arrotondamento, tra le altre:

# Output
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, 
capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

Per arrotondare un numero, puoi usare quantize() specificando:

  • La precisione (0,0 poiché vogliamo arrotondare all’intero più vicino) e
  • La modalità di arrotondamento: ROUND_CEILING
from decimal import Decimal, ROUND_CEILING

number = Decimal('3.2')
rounded_up = number.quantize(Decimal('0'), rounding=ROUND_CEILING)
print(rounded_up)  
# Output: 4

Qui il numero 3.2 è stato arrotondato al numero intero più vicino 4.

Come arrotondare i numeri per difetto in Python

Ora vediamo come arrotondare per difetto i numeri in Python. Analogamente al processo di arrotondamento, possiamo utilizzare i moduli matematici o decimali.

Utilizzando math.floor

La funzione floor() del modulo di matematica funziona in questo modo: arrotonda per difetto un numero all’intero più grande che è inferiore al numero.

Prendiamo il seguente esempio:

import math

number = 3.8
rounded_down = math.floor(number)
print(rounded_down)  
# Output: 3

In questo caso, la funzione floor() arrotonda per difetto il numero in virgola mobile da 3,8 a 3.

Utilizzo del modulo decimale

Per arrotondare un numero per difetto, puoi utilizzare quantize() impostando la modalità di arrotondamento su ROUND_FLOOR.

from decimal import Decimal, ROUND_FLOOR

number = Decimal('3.8')
rounded_down = number.quantize(Decimal('0'), rounding=ROUND_FLOOR)
print(rounded_down)  
# Output: 3

Come visto, 3,8 è stato arrotondato per difetto a 3.

Insidie ​​​​comuni da evitare quando si arrotondano i numeri

Abbiamo già visto che la funzione round() arrotonda la metà a pari, il che potrebbe non essere sempre desiderato. Ci sono altri errori comuni da evitare quando si arrotondano i numeri in Python:

  • Confronto di uguaglianza errato: i numeri di arrotondamento spesso introducono errori di arrotondamento. Se si tenta di eseguire un confronto di uguaglianza tra un risultato arrotondato con un altro valore, il controllo di uguaglianza fallirà (quasi sempre) a causa della precisione variabile. Quindi cerca di evitare controlli di uguaglianza tra numeri in virgola mobile e numeri in virgola mobile arrotondati. Se il confronto è necessario, introdurre una soglia di tolleranza.
  • Perdita di informazioni: potresti volere che alcuni dati, come le letture dei sensori con timestamp diversi, vengano acquisiti con alta precisione. Arrotondare tali dati a meno cifre decimali comporta la perdita di informazioni e un’analisi errata.
  • Arrotondamento dei risultati intermedi: spesso avrai più passaggi come parte del calcolo. Usa una precisione costante in tutti i passaggi. Inoltre, evitare l’arrotondamento nei passaggi intermedi per evitare che gli errori di arrotondamento si aggravino.

Migliori pratiche per arrotondare i numeri in Python

Elenchiamo alcune best practice da seguire per arrotondare i numeri in Python:

  • Scegli il tipo di dati giusto: scegli tra i tipi di dati float e decimal a seconda dell’applicazione. Se è necessario eseguire operazioni aritmetiche in virgola mobile ad alta precisione, scegliere il tipo di dati decimale.
  • Utilizza livelli di precisione coerenti: imposta livelli di precisione coerenti per i numeri decimali nell’intero programma per evitare errori di arrotondamento imprevisti.
  • Tecniche di arrotondamento dei documenti: nelle applicazioni del mondo reale che coinvolgono dati come valuta e letture di sensori, è importante disporre di una tecnica di arrotondamento coerente e documentata.

Avvolgendo

Concludiamo il tutorial con un rapido riepilogo di ciò che abbiamo imparato:

  • Puoi utilizzare la funzione incorporata round() con questa sintassi round(num, ndigits). Quando usi la funzione round(), dovresti essere consapevole della strategia di arrotondamento del banchiere. Pertanto, arrotonda i numeri esattamente tra due numeri interi all’intero pari più vicino.
  • Puoi utilizzare le funzioni ceil() e floor() del modulo di matematica per arrotondare per eccesso e per difetto un dato numero rispettivamente all’intero più vicino.
  • Quando è necessario eseguire operazioni aritmetiche in virgola mobile ad alta precisione, utilizzare il modulo decimale. È possibile arrotondare i numeri con la precisione e la strategia di arrotondamento richieste.
  • Dovresti essere consapevole delle insidie ​​​​comuni con l’arrotondamento dei numeri in Python. Questi includono la perdita di informazioni derivante dall’arrotondamento, i risultati dell’arrotondamento nei passaggi intermedi e l’utilizzo di una precisione diversa in diverse parti del codice.
  • Le migliori pratiche includono la scelta del tipo di dati corretto in base all’applicazione e la documentazione di livelli di precisione coerenti.

Successivamente, scopri come eseguire la divisione del piano in Python.

questo articolo è stato utile?

Grazie per il tuo feedback!