914 votos

Analizar la Cadena de Flotar o Int

En Python, ¿cómo puedo analizar una cadena alfanumérica como "545.2222" a su correspondiente valor de tipo float, 542.2222? O analizar la cadena "31" a un entero, 31?

Sólo quiero saber cómo analizar un float string a un flotador, y (por separado) int string int.

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

Python método para comprobar si la cadena es float:

def isfloat(value):
  try:
    float(value)
    return True
  except ValueError:
    return False

¿Qué es y qué no es un flotador en python que puede sorprender:

Command to parse                      isFloat? 
------------------------------------  --------  
print(isfloat(""))                    False     
print(isfloat("127"))                 True 
print(isfloat("NaN"))                 True  
print(isfloat("NaNanananaBATMAN"))    False
print(isfloat("-iNF"))                True     
print(isfloat("123.456"))             True
print(isfloat("123.E4"))              True
print(isfloat(".1"))                  True
print(isfloat("1,234"))               False
print(isfloat("NULL"))                False
print(isfloat(",1"))                  False
print(isfloat("123.EE4"))             False
print(isfloat("6.5235375356299e-07")) True
print(isfloat("6e777777"))            True
print(isfloat("1.797693e+308"))       True
print(isfloat("infinity"))            True
print(isfloat("infinityandBEYOND"))   False
print(isfloat("12.34.56"))            False
print(isfloat("#56"))                 False
print(isfloat("56%"))                 False
print(isfloat("0E0"))                 True
print(isfloat("x86E0"))               False
print(isfloat("86-5"))                False
print(isfloat("True"))                False
print(isfloat("-5e-5"))               True
print(isfloat("+1e1"))                True
print(isfloat("+1e1^5"))              False
print(isfloat("+1e1.3"))              False
print(isfloat("+1.3P1"))              False
print(isfloat("-+1"))                 False
print(isfloat("(1)"))                 False

65voto

wim Puntos 35274

Este es otro método que merece ser mencionado aquí, ast.literal_eval:

Esto puede ser usado de forma segura para la evaluación de cadenas que contiene las expresiones de Python a partir de fuentes no confiables, sin la necesidad de analizar los valores de uno mismo.

Es decir, un seguro 'eval'

>>> 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