-
¿Cómo puedo convertir un
str
afloat
?"545.2222" 545.2222
-
¿Cómo puedo convertir un
str
aint
?"31" 31
Respuestas
¿Demasiados anuncios?Método de Python para comprobar si una cadena es un flotador:
def is_float(value):
try:
float(value)
return True
except:
return False
Un nombre más largo y preciso para esta función podría ser: is_convertible_to_float(value)
Qué es y qué no es un flotador en Python puede sorprenderle:
val is_float(val) Note
-------------------- ---------- --------------------------------
"" False Blank string
"127" True Passed string
True True Pure sweet Truth
"True" False Vile contemptible lie
False True So false it becomes true
"123.456" True Decimal
" -127 " True Spaces trimmed
"\t\n12\r\n" True whitespace ignored
"NaN" True Not a number
"NaNanananaBATMAN" False I am Batman
"-iNF" True Negative infinity
"123.E4" True Exponential notation
".1" True mantissa only
"1,234" False Commas gtfo
u'\x30' True Unicode is fine.
"NULL" False Null is not special
0x3fade True Hexadecimal
"6e7777777777777" True Shrunk to infinity
"1.797693e+308" True This is max value
"infinity" True Same as inf
"infinityandBEYOND" False Extra characters wreck it
"12.34.56" False Only one dot allowed
u'四' False Japanese '4' is not a float.
"#56" False Pound sign
"56%" False Percent of what?
"0E0" True Exponential, move dot 0 places
0**0 True 0___0 Exponentiation
"-5e-5" True Raise to a negative number
"+1e1" True Plus is OK with exponent
"+1e1^5" False Fancy exponent not interpreted
"+1e1.3" False No decimals in exponent
"-+1" False Make up your mind
"(1)" False Parenthesis is bad
¿Crees que sabes lo que son los números? No eres tan bueno como crees. No es una gran sorpresa.
No utilice este código en software vital.
Atrapar excepciones amplias de esta forma, matando canarios y engullendo la excepción crea una pequeña posibilidad de que un float válido como cadena devuelva false. El float(...)
puede fallar por miles de razones que no tienen nada que ver con el contenido de la cadena. Pero si estás escribiendo software vital en un lenguaje prototipo como Python, entonces tienes problemas mucho mayores.
Este es otro método que merece ser mencionado aquí, ast.literal_eval :
Puede utilizarse para evaluar de forma segura cadenas que contengan expresiones Python procedentes de fuentes no fiables sin necesidad de analizar los valores uno mismo.
Es decir, una 'eval' segura
>>> import ast
>>> ast.literal_eval("545.2222")
545.2222
>>> ast.literal_eval("31")
31