Cómo convertir una cadena en Float o Int en Python
-
float()
para convertir una cadena a float en Python -
int()
para convertir la cadena a int en Python -
ast.literal_eval
para convertir la cadena a float o int en Python - Localización y comas en la conversión de una cadena a float en Python
- Comparación de las prestaciones de los diferentes métodos para convertir string a float o int en Python
Este artículo del tutorial introducirá cómo convertir una cadena a float o int en Python.
float()
para convertir una cadena a float en Python
float()
convierte la cadena en el número apuntador float
, si es posible.
>>> float('111.2222')
111.2222
>>> float('111.0')
111.0
>>> float('111')
111.0
int()
para convertir la cadena a int en Python
int()
podría convertir la cadena a un entero si la cadena dada es la representación de un entero. De lo contrario, levantará 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'
Podrías convertir la cadena a float
primero y luego lanzarla a in
si la cadena dada es la representación de un número que apunta flotante.
>>> int(float('111.0'))
111
ast.literal_eval
para convertir la cadena a float o int en Python
ast.literal_eval(string)
evalúa de forma segura la cadena dada que contiene una expresión en Python. Podría convertir la cadena en float
o int
automáticamente.
>>> ast.literal_eval('111.2222')
111.2222
>>> ast.literal_eval('111.0')
111.0
>>> ast.literal_eval('111')
111
Localización y comas en la conversión de una cadena a float en Python
Si la coma ,
existe en la representación de la cadena, entonces la conversión float
arrojará una excepción ValueError
. Pero las comas se usan regularmente como separador de mil en países como EE.UU. o el Reino Unido, por ejemplo 111,111.22
, o como signo decimal en la mayoría de los países europeos, por ejemplo 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'
El módulo locale
debería usarse para asignar la información de localización y luego la función locale.atof()
podría analizar la cadena dada como un float de acuerdo con los ajustes de localización.
Comas como separador de mil en US o UK
>>> 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 coma ,
podría ser interpretada correctamente si se da el ajuste de localización correcto.
Tenga en cuenta también que el resultado de la conversión es siempre de tipo float
, incluso si la representación de la cadena dada es un número entero.
Las comas como marca demencial en los países europeos
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'nl_NL')
'nl_NL'
>>> locale.atof('111,222')
111.222
>>> locale.atof('111.111,222')
111111.222
El punto 111,222
se convierte en 111.222
correctamente, y 111.111,222
también podría convertirse correctamente en 111111.222
, ya que el punto .
se usa como el milésimo separador en países europeos como los Países Bajos.
Comparación de las prestaciones de los diferentes métodos para convertir string a float o int en Python
Utilizamos timeit
para comprobar el rendimiento de la eficiencia entre los diferentes métodos.
>>> 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
El método ast.literal_eval()
es tremendamente más lento que el método float
como se muestra arriba. No debería ser la primera opción si simplemente necesita convertir string a float o int en Python. El método ast.literal_eval()
está sobredimensionado en esta aplicación ya que su principal objetivo debería ser evaluar la cadena que contiene la expresión en Python.
locale.atof()
es también extremadamente lento, por lo que sólo debe usarse cuando existan comas en la cadena para la convención en US o UK, o el punto .
significa el separador de mil pero la coma ,
significa la marca decimal en los países europeos. En otras palabras, debería usar locale.atof()
si es realmente necesario.
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