Corso
Arrotondare i numeri a due cifre decimali è una tecnica importante in Python. È particolarmente utile nei calcoli finanziari, nella presentazione dei dati e nei report scientifici.
Python offre diversi metodi per un arrotondamento preciso. In questo tutorial, ti mostrerò come arrotondare un numero a due cifre decimali in Python usando funzioni integrate, librerie e metodi di formattazione.
Se stai iniziando come data analyst, ti consiglio il corso di DataCamp Introduction to Python per imparare le basi di Python per la manipolazione e la trasformazione dei dati. Ti sarà utile anche il nostro tutorial su Python NumPy se devi arrotondare grandi array di numeri nei flussi di lavoro di data analysis.
TL;DR
-
Usa
round(number, 2)per l'arrotondamento aritmetico — modifica il valore effettivo. -
Usa
f"{number:.2f}"ostr.format()solo per la visualizzazione — il float originale non cambia. -
Usa il modulo
decimalquando è richiesta precisione decimale esatta (ad es. calcoli finanziari). -
Usa
np.round(array, 2)per arrotondare un intero array NumPy in una sola chiamata. -
Attenzione alle sorprese di precisione dei float:
round(2.675, 2)restituisce2.67, non2.68, a causa di come i float sono memorizzati in memoria.
Capire arrotondamento e cifre decimali
Le cifre decimali sono i numeri che compaiono subito dopo la virgola decimale. Le cifre decimali sono importanti perché determinano la precisione di un numero. Più cifre decimali ci sono, maggiore è la precisione, e viceversa.
Arrotondare i numeri significa modificare un numero riducendo il numero di cifre decimali. Questa tecnica è in genere applicata per semplificare un numero mantenendo coerenza tra i calcoli. Tuttavia, arrotondare un numero a un numero specifico di decimali influisce sull'accuratezza dei valori calcolati a causa dell'introduzione di piccoli errori durante l'arrotondamento.
Python fornisce diversi metodi per arrotondare i numeri a due cifre decimali. I seguenti esempi offrono spiegazioni dettagliate di queste tecniche.
Usare round() per arrotondare un numero in Python
La funzione round() è la funzione integrata di Python per arrotondare numeri in virgola mobile al numero di cifre decimali specificato. Puoi specificare il numero di decimali da ottenere fornendo un valore come secondo argomento. L'esempio seguente stampa 34,15.
# Example number to be rounded
number = 34.14559
# Rounding the number to 2 decimal places
rounded_number = round(number, 2)
print(rounded_number)
# 34.15
La funzione round() di Python usa "round half to even" come modalità di arrotondamento predefinita quando ometti il secondo argomento. Nell'arrotondamento per eccesso/difetto al pari (bankers’ rounding), quando un numero è esattamente a metà tra due interi, viene arrotondato all'intero pari più vicino. Questa tecnica è utile perché può aiutare a ridurre gli errori di arrotondamento cumulativi.
Insidia della precisione dei float con round()
C'è una sottigliezza da conoscere prima di fare affidamento su round() nel codice finanziario. Prova così:
print(round(2.675, 2)) # You might expect 2.68
# Output: 2.67
Il risultato è 2.67, non 2.68. Il valore 2.675 non può essere rappresentato esattamente in virgola mobile binaria (IEEE 754); il valore memorizzato è leggermente inferiore a 2.675, quindi Python arrotonda per difetto.
Se ti serve un arrotondamento esatto per calcoli finanziari, usa il modulo decimal con una modalità di arrotondamento esplicita:
from decimal import Decimal, ROUND_HALF_UP
result = Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print(result) # 2.68
Usare le tecniche di formattazione delle stringhe per arrotondare un numero in Python
Le tecniche di formattazione delle stringhe sono utili per arrotondare i numeri a due cifre decimali, soprattutto quando si vuole visualizzare il numero in output.
Ricorda che quando usi le tecniche di formattazione delle stringhe in Python per arrotondare un numero, l'output arrotondato viene visualizzato come stringa, ma il numero originale resta invariato. Se esegui operazioni matematiche sul numero originale, i calcoli si basano sul valore non arrotondato, cosa che può portare a risultati sorprendenti.
Arrotondare con l'operatore %
L'operatore % offre un metodo tradizionale per formattare i numeri a due cifre decimali. L'operatore % consente di creare stringhe formattate inserendo valori nei segnaposto.
Nell'esempio seguente, f indica il valore come numero in virgola mobile mentre .2 specifica le cifre decimali a cui arrotondare il numero.
# Example number to be rounded
number = 3.14159
# Using the % operator to round to 2 decimal places
formatted_number = "%.2f" % number
print(formatted_number)
# 3.14
Arrotondare con str.format()
Il metodo str.format() offre un modo più flessibile per gestire tecniche di arrotondamento complesse. Poiché usa segnaposto nominati, sviluppatori tendono a preferirlo rispetto all'operatore %. Nell'esempio seguente, :.2f è usato tra parentesi graffe per specificare che il numero va arrotondato a due cifre decimali. Il codice stamperà 3.14.
# Example number to be rounded
number = 3.14159
# Using str.format() to round to 2 decimal places
formatted_number = "{:.2f}".format(number)
print(formatted_number)
# 3.14
Arrotondare con le f-string (Python 3.6+)
Le f-string sono arrivate in Python 3.6 e sono ora il modo preferito per incorporare valori nelle stringhe. La sintassi delle f-string è particolarmente pulita per l'arrotondamento: ottieni la formattazione per la visualizzazione in una riga senza chiamate separate. Il codice seguente stampa 14.68.
# Example number to be rounded
number = 14.67856
# Using f-strings to round to 2 decimal places
formatted_number = f"{number:.2f}"
print(formatted_number)
# 14.68
Usare format() per arrotondare un numero in Python
La funzione integrata format() accetta un valore e una specifica di formato e restituisce una stringa formattata. A differenza di str.format(), passi il numero direttamente invece di incorporarlo in una stringa template. Il codice seguente stampa 345.69.
# Example number to be rounded
number = 345.68776
# Using the built-in format() to round to 2 decimal places
formatted_number = format(number, ".2f")
print(formatted_number)
# 345.69
Usare altri moduli per arrotondare un numero in Python
Oltre a Python di base, ci sono molti altri moduli che puoi usare per arrotondare i numeri in Python. Ti mostrerò i tre esempi più importanti: math, decimal e NumPy.
Arrotondare usando il modulo math
Il modulo math non fornisce funzioni che arrotondano direttamente i numeri a un numero specifico di cifre decimali. Tuttavia, puoi combinare il modulo math con altre operazioni aritmetiche per arrotondare un numero a due cifre decimali.
La funzione math.floor() viene usata per arrotondare per difetto un numero all'intero più vicino. Per arrotondare per difetto un numero a due cifre decimali, moltiplicalo per 100, applica la funzione math.floor() e dividi per 100. Il codice seguente stampa 3.14.
# Import math module
import math
# Example number to be rounded
number = 3.14159
# Using math.floor() to round down to 2 decimal places
rounded_down = math.floor(number * 100) / 100
print(rounded_down)
# 3.14
Analogamente, la funzione math.ceil() arrotonda un numero per eccesso all'intero più vicino. Per arrotondare per eccesso un numero a due cifre decimali, moltiplicalo per 100, applica la funzione math.ceil() e dividi per 100. Il codice seguente stampa 3.15.
# Import the math module
import math
# Example number to be rounded
number = 3.14159
# Using math.ceil() to round up to 2 decimal places
rounded_up = math.ceil(number * 100) / 100
print(rounded_up)
# 3.15
Arrotondare usando il modulo decimal
Il modulo decimal in Python è utile per arrotondare numeri float a cifre decimali precise usando il metodo .quantize(). Nell'esempio seguente, impostiamo la precisione a 0.01 per indicare che vogliamo arrotondare il numero a due cifre decimali.
# Import the decimal module
from decimal import Decimal
# Example number to be rounded
number = Decimal("18.73869")
# Define the rounding precision to 2 decimal places
precision = Decimal('0.01')
# Using the quantize method with ROUND_UP
# to round the number up to 2 decimal places
rounded_number = number.quantize(precision)
print(rounded_number)
# 18.74
Se cerchi un comportamento specifico di arrotondamento verso l'alto, dai un'occhiata al nostro ultimo tutorial su Come arrotondare per eccesso un numero in Python per saperne di più sull'uso dei moduli math e decimal, e su altre tecniche per assicurarti che il numero venga sempre arrotondato per eccesso, e non per difetto. Se vuoi comprendere meglio la trasformazione dei dati in generale, segui il nostro percorso di carriera Data Analyst with Python per far crescere le tue competenze analitiche.
Arrotondare usando NumPy
Quando lavori con array in NumPy, usa np.round() per arrotondare tutti gli elementi in una volta. È più veloce e più leggibile che iterare manualmente sui valori.
import numpy as np
prices = np.array([1.2345, 9.8765, 3.14159])
rounded_prices = np.round(prices, 2)
print(rounded_prices)
# [1.23 9.88 3.14]
np.round() applica la stessa regola di bankers' rounding della funzione integrata round() di Python. Il metodo .round() funziona allo stesso modo su DataFrame e Series di pandas:
import pandas as pd
df = pd.DataFrame({"price": [1.2345, 9.8765, 3.14159]})
df["price_rounded"] = df["price"].round(2)
print(df)
# price price_rounded
# 0 1.2345 1.23
# 1 9.8765 9.88
# 2 3.14159 3.14
Per una panoramica più ampia della trasformazione dei dati con pandas, vedi il nostro tutorial su pandas.
Quando usare ciascun metodo di arrotondamento in Python
Ecco un rapido riferimento per scegliere l'approccio di arrotondamento giusto:
| Metodo | Ideale per | Cambia il valore? | Restituisce |
|---|---|---|---|
round(x, 2) |
Aritmetica generale | Sì | float |
f"{x:.2f}" |
Display / stampa | No | str |
str.format() |
Display / stampa | No | str |
% operator |
Display / stampa (legacy) | No | str |
format(x, ".2f") |
Display / valore singolo | No | str |
math.floor() / ceil() |
Sempre verso il basso / verso l'alto | Sì | float |
Decimal.quantize() |
Finanza / decimale esatto | Sì | Decimal |
np.round(arr, 2) |
Array NumPy | Sì | ndarray |
Alcune regole pratiche per guidare la scelta:
-
Stai solo visualizzando un numero? Usa una f-string (
f"{x:.2f}"). Una riga, nessuna importazione, nessun effetto collaterale sul valore originale. -
Devi fare aritmetica con il risultato? Usa
round(x, 2). Restituisce un float con cui puoi continuare a calcolare. -
Codice finanziario o contabile? Usa
Decimal.quantize(). Le sorprese di precisione dei float (round(2.675, 2) == 2.67) non accadono con il modulodecimal. -
Devi andare sempre in su o sempre in giù? Usa
math.ceil()omath.floor(). Ignorano del tutto le regole di arrotondamento. -
Stai lavorando con un array NumPy o una colonna pandas? Usa
np.round(arr, 2)oseries.round(2). Entrambi gestiscono l'intera collezione in una volta sola. -
Stai mantenendo codice vecchio? L'operatore
%funziona ancora, ma le f-string lo hanno sostituito in Python 3.6 — preferiscile nel nuovo codice.
Considerazioni finali
Arrotondare i numeri a due cifre decimali è una tecnica importante per migliorare la precisione nei calcoli finanziari e scientifici. In questo articolo, abbiamo discusso i diversi metodi per arrotondare i numeri a due cifre decimali, incluse le funzioni integrate, le tecniche di formattazione delle stringhe e il modulo math. È importante comprendere e selezionare il metodo appropriato in base ai requisiti specifici, come la precisione e lo stile di formattazione. Ti incoraggio a esercitarti con i diversi metodi usando vari esempi per capire meglio quale si adatta meglio ai tuoi casi d'uso.
Se vuoi far progredire le tue competenze in Python, consulta il nostro percorso di abilità Python Programming, che copre funzioni, decorator e pattern avanzati in Python. Il nostro percorso di carriera Python Developer è inoltre pensato per aiutarti a crescere come sviluppatore mentre impari strutture dati e algoritmi più avanzati.
Domande frequenti
Qual è il modo più semplice per arrotondare un numero a due cifre decimali in Python?
Il modo più semplice per arrotondare un numero a due cifre decimali è usare la funzione integrata round().
Perché un numero viene arrotondato all'intero più vicino usando la funzione round()?
Il metodo predefinito di round() è round half to even. Per arrotondare un numero a due cifre decimali, devi fornire il secondo argomento come 2 nella funzione, cioè round(3.14159, 2).
Come si usa la funzione format() per arrotondare un numero a due cifre decimali?
La funzione format() si usa per arrotondare un numero al numero specificato di cifre decimali e visualizzarlo all'interno di una stringa formattata.
Che cos'è il round half to even?
Il metodo round half to even, o bankers’ rounding, prevede di arrotondare un numero esattamente a metà tra due interi all'intero pari più vicino.
Il modulo math consente di arrotondare un numero a due cifre decimali in Python?
Puoi usare le funzioni math.floor() e math.ceil() solo insieme ad altre operazioni aritmetiche per arrotondare un numero a un numero specificato di cifre decimali.
Perché round(2.675, 2) restituisce 2.67 invece di 2.68?
È un problema di precisione della virgola mobile. Il valore 2.675 non può essere rappresentato esattamente in virgola mobile binaria (IEEE 754); il valore memorizzato è leggermente inferiore a 2.675, quindi Python arrotonda a 2.67.
Per evitarlo nel codice finanziario, usa il modulo decimal con una modalità di arrotondamento esplicita: Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP) restituisce 2.68 come previsto.
Come arrotondo tutti i valori in un DataFrame pandas a 2 cifre decimali?
Usa il metodo .round() su un DataFrame o una Series. Per arrotondare una singola colonna: df["price"] = df["price"].round(2). Per arrotondare tutte le colonne numeriche in una volta: df = df.round(2).


