HOWTO · Python
Converti un numero in virgola mobile in un intero in Python
Questo articolo introduce come convertire un numero a virgola mobile in un intero in Python
In questa pagina
Per convertire un float in un intero in Python, usa la funzione integrata int() se vuoi eliminare la parte frazionaria troncando verso zero. Per applicare una regola diversa, usa math.ceil() per ottenere il più piccolo intero maggiore o uguale al valore, oppure math.floor() per ottenere il più grande intero minore o uguale. La libreria standard offre anche math.trunc(), che tronca verso zero. Scegli la funzione in base al comportamento richiesto dal calcolo: con i valori negativi queste funzioni non danno tutte lo stesso risultato.
Convertire un float in un intero con int()
Esegui questo esempio:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
number = 25.49
print(int(number))
25
Con un valore frazionario positivo, int() elimina la parte frazionaria. Fa lo stesso verso zero con un valore negativo: int(-1.5) restituisce -1, non -2. Si tratta di troncamento, non di arrotondamento all’intero più vicino. Se vuoi arrotondare al valore più vicino, usa un’operazione di arrotondamento anziché aspettarti che lo faccia int().
int() accetta un float, un intero e una stringa che rappresenta un intero, per esempio int("25"). Una stringa che contiene un punto decimale, come "25.49", non rappresenta un intero e non può essere passata direttamente a int(). Se il troncamento è quello che desideri, converti prima il testo decimale in un float e poi converti quel float. Tieni presente il tipo di input: passare un valore numerico float e passare una stringa sono conversioni diverse.
Anche la rappresentazione di un letterale float può differire dalla sua forma decimale scritta. Per esempio, Python può rappresentare 1.9999999999999999 come 2.0; applicando int() al float già rappresentato si ottiene quindi l’intero corrispondente a 2.0. Non esiste una regola speciale di int() per sedici o più cifre 9. La conversione opera sul valore float risultante dall’analisi del testo: un risultato vicino a un intero può dipendere sia dalla rappresentazione in virgola mobile sia dal troncamento.
Scegliere tra troncamento, arrotondamento per eccesso o per difetto con math
Usa il modulo math quando vuoi specificare chiaramente la regola da applicare. math.trunc() tronca verso zero, come fa int() con i float. math.ceil() restituisce il più piccolo intero maggiore o uguale al valore; math.floor() restituisce il più grande intero minore o uguale. La differenza è importante sotto zero: troncando -1.5 si ottiene -1, mentre con il floor si ottiene -2 e con il ceiling -1. Per le frazioni positive, troncamento e floor portano allo stesso intero inferiore, mentre il ceiling porta a quello superiore.
L’esempio completo seguente confronta i valori positivi e negativi con tutte e tre le funzioni della libreria standard.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
import math
for number in (1.5, -1.5):
print(number, math.trunc(number), math.ceil(number), math.floor(number))
1.5 1 2 1
-1.5 -1 -1 -2
Usa int() o math.trunc() per eliminare la parte frazionaria troncando verso zero, math.ceil() quando il risultato non deve essere inferiore al valore iniziale e math.floor() quando non deve essere superiore. Per esempio, se converti una quantità misurata in unità intere, stabilisci se l’applicazione deve conteggiare soltanto le unità complete, assegnarne sempre abbastanza oppure considerare solo quelle interamente contenute nella quantità. Esplicitare la regola nel codice lo rende più facile da verificare e impedisce di affidarsi a una direzione di arrotondamento non voluta.
Con normali input numerici finiti, tutte queste funzioni restituiscono interi Python. La parte frazionaria non viene conservata. Se ti serve per calcoli successivi, mantieni il float originale insieme all’intero convertito. Per quantità decimali che richiedono calcoli esatti, valuta se sia più adatta una rappresentazione decimale prima della conversione: convertire un float già approssimato non può recuperare le cifre decimali perse durante la rappresentazione.