Come convertire una stringa in Float o Int in Python

Jinku Hu 30 gennaio 2023 Python Python String
  1. float() per convertire la stringa in float in Python
  2. int() per convertire la stringa in int in Python
  3. ast.literal_eval per convertire la stringa in float o int in Python
  4. Localizzazione e virgole nella conversione della stringa in float in Python
  5. Confronto delle prestazioni di diversi metodi per convertire la stringa in float o int in Python
Come convertire una 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.

Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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 Facebook

Articolo correlato - Python String