Corso Python / Numeri e operazioni: interi, float e conversioni
In Python int rappresenta numeri interi e float numeri in virgola mobile binaria. Per quantità con regole decimali esatte, scegli unità intere oppure Decimal, specificando unità e arrotondamento: il tipo numerico da solo non decide queste regole.
Interpretare correttamente gli operatori
| Espressione | Operazione | Risultato |
|---|---|---|
7 / 2 |
Divisione | 3.5 |
7 // 2 |
Divisione con arrotondamento verso il basso | 3 |
7 % 2 |
Resto | 1 |
2 ** 3 |
Potenza | 8 |
La divisione // arrotonda verso meno infinito, non verso zero. Per questo -7 // 2 vale -4, mentre int(-3.5) tronca la parte frazionaria e restituisce -3. Con interi positivi la differenza può non essere evidente; i numeri negativi permettono di verificarla.
Gli interi Python non hanno un limite fisso di 32 bit, ma dimensioni e operazioni restano limitate dalle risorse disponibili. Usa parentesi quando l’ordine di calcolo non è chiaro: (2 + 3) * 4 vale 20, mentre 2 + 3 * 4 vale 14. I tipi numerici predefiniti definiscono gli operatori e le conversioni.
Confrontare int, float e Decimal in un file completo
Salva il seguente programma come numeric_demo.py in UTF-8, in una cartella di esercitazione. Eseguilo con python numeric_demo.py nell’ambiente del progetto; su macOS o Ubuntu, fuori dall’ambiente virtuale, usa python3 se è il comando dell’interprete scelto. decimal fa parte della libreria standard: non occorre installarlo con pip.
from decimal import Decimal
print(7 / 2, 7 // 2, 7 % 2)
print(-7 // 2, int(-3.5))
print(0.1 + 0.2 == 0.3)
print(Decimal("0.1") + Decimal("0.2"))
price_won = 3500
print(price_won * 3)
Il risultato atteso è:
3.5 3 1
-4 -3
False
0.3
10500
Le prime due righe confrontano divisione, resto e conversione. La terza stampa False perché le approssimazioni binarie di 0.1 e 0.2 non sommano esattamente alla rappresentazione di 0.3. La quarta usa valori decimali creati da stringhe e ottiene 0.3; l’ultima moltiplica un prezzo intero di 3500 won per tre, ottenendo 10500 won.
Il comportamento di float non è un errore casuale dell’interprete. Molte frazioni decimali non hanno una rappresentazione binaria finita, come spiegato nella guida Python ai limiti della virgola mobile. Per misure approssimate può essere appropriato confrontare i valori con una tolleranza scelta in base al problema; non sostituire automaticamente ogni confronto con un arrotondamento arbitrario.
Distinguere conversione, formattazione e precisione
int("3500") interpreta una stringa intera. int("3.5") genera ValueError, mentre int(3.5) restituisce 3 troncando il valore numerico verso zero. float("3.5") restituisce invece 3.5. Non passare da float solo per far accettare una stringa decimale: troncheresti una parte del dato senza una regola esplicita.
La formattazione cambia il testo mostrato: format(0.1 + 0.2, ".2f") produce la stringa "0.30", ma non modifica il valore float originario. Visualizzare due cifre decimali e svolgere un calcolo decimale esatto sono operazioni diverse.
Decimal supporta l’aritmetica decimale. Crealo da una stringa come Decimal("0.1"); con Decimal(0.1) trasferisci anche l’approssimazione già presente nel float. La documentazione del modulo decimal descrive precisione, contesto e modalità di arrotondamento. Il contesto limita la precisione dei calcoli: Decimal non rende esatti senza condizioni tutti i risultati, per esempio la divisione di uno per tre.
Verificare limiti ed errori nei calcoli
Per spese in won interi, un valore come 3500 è semplice da gestire con int. Se i dati prevedono frazioni o altre valute, registra chiaramente l’unità; con unità minime intere, 3500 centesimi e 3500 euro avrebbero significati diversi. Definisci quando arrotondare e quali valori ammettere prima di applicare i calcoli.
- Confronta
-7 // 2con-7 / 2: ottieni rispettivamente -4 e -3.5. Spiega perché il primo non è un semplice taglio della parte decimale. - Nella prima istruzione di stampa cambia solo il divisore della prima divisione da 2 a 0: compare
ZeroDivisionErrore l’esecuzione non arriva alle stampe successive. Ripristina 2 ed esegui nuovamente il file. - Prova separatamente
int("3500 KRW"): la stringa comprende l’unità e non è un intero valido. Mantieni numero e unità separati anziché eliminare caratteri senza sapere cosa rappresentano.
L’esempio di lettura dell’importo con input() mostra il punto in cui il testo diventa un numero. Controlla quel confine per distinguere un errore di formato dell’input da un risultato inatteso dovuto a precisione o arrotondamento.




