Come convertire una stringa in Float o Int in Python
-
float()
per convertire la stringa in float in Python -
int()
per convertire la stringa in int in Python -
ast.literal_eval
per convertire la stringa in float o int in Python - Localizzazione e virgole nella conversione della stringa in float in Python
- Confronto delle prestazioni di diversi metodi per convertire la stringa in float o int in Python
Questo articolo del tutorial introdurrà come convertire una stringa in float o int in Python.
float()
per convertire la stringa in float in Python
float()
converte la stringa nel numero di puntamento float
, se possibile.
>>> float('111.2222')
111.2222
>>> float('111.0')
111.0
>>> float('111')
111.0
int()
per convertire la stringa in int in Python
int()
potrebbe convertire la stringa in un intero se la stringa data è la rappresentazione di un intero. Altrimenti solleverà ValueError
.
>>> int('111')
111
>>> int('111.0')
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
int('111.0')
ValueError: invalid literal for int() with base 10: '111.0'
>>> int('111.22222')
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
int('111.22222')
ValueError: invalid literal for int() with base 10: '111.22222'
Si potrebbe convertire la stringa in float
prima e poi lanciarla in int
se la stringa data è la rappresentazione di un numero a virgola mobile.
>>> int(float('111.0'))
111
ast.literal_eval
per convertire la stringa in float o int in Python
ast.literal_eval(string)
valuta in modo sicuro la stringa data contenente un’espressione Python. Potrebbe convertire la stringa in float
o int
automaticamente.
>>> ast.literal_eval('111.2222')
111.2222
>>> ast.literal_eval('111.0')
111.0
>>> ast.literal_eval('111')
111
Localizzazione e virgole nella conversione della stringa in float in Python
Se la virgola ,
esiste nella rappresentazione delle stringhe, allora la conversione float
lancerà un’eccezione ValueError
. Ma le virgole sono regolarmente usate come mille separatori in paesi come gli Stati Uniti o il Regno Unito, per esempio 111,111.22
, o come segno decimale nella maggior parte dei paesi europei, per esempio 111,222
.
>>> float('111,111.22')
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
float('111,111.22')
ValueError: could not convert string to float: '111,111.22'
>>> float('111,111')
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
float('111,111')
ValueError: could not convert string to float: '111,111'
Il modulo locale
dovrebbe essere usato per assegnare le informazioni locali e poi la funzione locale.atof()
potrebbe analizzare la stringa data come un galleggiante secondo le impostazioni locali.
Le virgole come mille separatori negli USA o nel Regno Unito
>>> import locale
>>> A = '111,111.222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(A)
111111.222
>>> locale.atof('111,111')
111111.0
La virgola ,
potrebbe essere interpretata correttamente se viene data la giusta impostazione del locale.
Siate anche consapevoli del fatto che il risultato della conversione è sempre di tipo float
anche se la rappresentazione della stringa data è un numero intero.
Le virgole come segno demico nei paesi europei
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'nl_NL')
'nl_NL'
>>> locale.atof('111,222')
111.222
>>> locale.atof('111.111,222')
111111.222
111.222
è convertito correttamente in 111.222
, e 111.111,222
potrebbe anche essere convertito correttamente in 11111111.222
in quanto il punto .
è usato come il mille separatore in paesi europei come i Paesi Bassi.
Confronto delle prestazioni di diversi metodi per convertire la stringa in float o int in Python
Utilizziamo il timeit
per verificare le prestazioni di efficienza tra i diversi metodi.
>>> import timeint
>>> timeit.timeit('float(111.2222)', number=1000000)
0.14707240000007005
>>> timeit.timeit('ast.literal_eval("111.2222")', setup='import ast', number=1000000)
4.779956100000163
>>> timeit.timeit('locale.atof("111.2222")', setup='import locale; locale.setlocale(locale.LC_ALL, "en_US.UTF-8")', number=1000000)
6.092166299999917
Il metodo ast.literal_eval()
è tremendamente più lento del metodo float
come mostrato sopra. Non dovrebbe essere la prima scelta se si ha semplicemente bisogno di convertire una stringa in float o int in Python. ast.literal_eval()
è eccessivamente ingegnerizzato in questa applicazione, in quanto il suo obiettivo principale dovrebbe essere la valutazione della stringa contenente l’espressione Python.
locale.atof()
è anche estremamente lento, quindi dovrebbe essere usato solo quando esistono virgole nella stringa per la convenzione negli USA o nel Regno Unito, o punto .
significa il mille separatore ma virgola ,
significa il segno decimale nei paesi europei. In altre parole, si dovrebbe usare locale.atof()
se è veramente necessario.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn FacebookArticolo correlato - Python String
- Come controllare una stringa è vuota in modo pitonico
- Converti una stringa in nome variabile in Python
- Come rimuovere gli spazi bianchi in una stringa in Python
- Estrai numeri da una stringa in Python
- Come convertire una stringa in datario in Python
- Come convertire una stringa in minuscola in Python 2 e 3