914 votos

¿Cómo puedo convertir una cadena en un valor float o int?

  • ¿Cómo puedo convertir un str a float ?

    "545.2222"    545.2222
  • ¿Cómo puedo convertir un str a int ?

    "31"          31

1105voto

Harley Holcombe Puntos 34618
>>> a = "545.2222"
>>> float(a)
545.22220000000004
>>> int(float(a))
545

279voto

Javier Puntos 33134
def num(s):
    try:
        return int(s)
    except ValueError:
        return float(s)

168voto

Eric Leschinski Puntos 14289

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.

65voto

wim Puntos 35274

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

61voto

Dino Viehland Puntos 837
float(x) if '.' in x else int(x)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X