Come arrotondare un numero in Python (funzione round() e decimale)

Scopri come arrotondare i numeri in virgola mobile in Python. Comprendere l'arrotondamento di Banker, la precisione decimale personalizzata e la formattazione in virgola mobile per la visualizzazione.

Prova questa soluzione nell'editor

Panoramica

L'aritmetica in virgola mobile nei computer a volte può portare a problemi di precisione imprevisti a causa del modo in cui i sistemi binari memorizzano i decimali (ad esempio, `0.1 + 0.2` che restituisce `0.30000000000000004`). Quando si restituiscono numeri agli utenti o si preparano parametri, l'arrotondamento dei numeri è un requisito comune. Python offre diversi modi per raggiungere questo obiettivo.

Lo strumento principale è la funzione integrata `round(number, ndigits)`. Richiede un numero e un conteggio di precisione opzionale. Se "ndigits" viene omesso, viene arrotondato al numero intero più vicino. Se viene fornito "ndigits", l'arrotondamento avviene a quel numero di cifre decimali.

Una proprietà chiave della funzione `round()` di Python è che utilizza l'"arrotondamento del banchiere" (arrotonda da metà a pari). Quando un numero è esattamente a metà tra due numeri interi (ad esempio, `2.5` o `3.5`), Python arrotonda al numero *pari* più vicino. Ciò significa che "round(2.5)" è "2" e "round(3.5)" è "4". Anche se matematicamente corretto su set di dati di grandi dimensioni per evitare distorsioni al rialzo, per calcoli finanziari precisi dovresti utilizzare gli strumenti di quantizzazione del modulo "decimale".

Codice e output di esecuzione

Questo script dimostra l'arrotondamento dei valori mobili utilizzando la funzione di arrotondamento incorporata, gli esempi di arrotondamento di Banker e il modulo decimale.

round_numbers.py
Prova nell'editor
from decimal import Decimal, ROUND_HALF_UP

val = 3.14159

# 1. Round to nearest integer
print("Nearest Integer:", round(val))

# 2. Round to 2 decimal places
print("Two decimals:", round(val, 2))

# 3. Banker's Rounding demonstration (rounds to nearest even)
print("round(2.5):", round(2.5)) # Nearest even is 2
print("round(3.5):", round(3.5)) # Nearest even is 4

# 4. Math rounding up (Traditional rounding) using decimal module
amount = Decimal("2.5")
rounded_up = amount.quantize(Decimal("1"), rounding=ROUND_HALF_UP)
print("Decimal ROUND_HALF_UP (2.5):", rounded_up)
Uscita terminale
Nearest Integer: 3
Two decimals: 3.14
round(2.5): 2
round(3.5): 4
Decimal ROUND_HALF_UP (2.5): 3

Implementazione passo dopo passo

  • Chiama la funzione incorporata round(number) per arrotondare un float all'intero più vicino.
  • Passare un secondo argomento (ad esempio, round(num, 2)) per specificare il numero di cifre decimali da mantenere.
  • Utilizzare il modulo decimale con ROUND_HALF_UP per calcoli rigorosi di arrotondamento finanziario.

Domande frequenti

Perché round(2.5) restituisce 2 anziché 3 in Python?

Python utilizza l'arrotondamento di Banker, che arrotonda la metà dei numeri all'intero pari più vicino. Ciò riduce la distorsione statistica (l'arrotondamento per eccesso della metà dei numeri provoca sempre una leggera deriva verso l'alto su set di dati di grandi dimensioni).

Come arrotondare un numero sempre per eccesso o sempre per difetto?

Importa il modulo matematico e utilizza math.ceil(x) per arrotondare al numero intero successivo o math.floor(x) per arrotondare al numero intero precedente.

Argomenti correlati

Risorse Python consigliate

Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.