2588 votes

flotter

En Python, comment puis-je analyser une chaîne numérique comme "545.2222" correspondant à son flotteur de valeur, 542.2222? Ou analyser la chaîne "31" pour un entier, 31?

Je veux juste savoir comment analyser un float string à un flotteur, et (séparément) un int chaîne de type int.

2972voto

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

576voto

Eric Leschinski Points 14289

Python méthode pour vérifier si la chaîne est float:

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

Ce qui est, et n'est pas un flotteur en python pourrait vous surprendre:

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

564voto

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

151voto

wim Points 35274

C'est une autre méthode qui mérite d'être mentionné ici, ast.literal_eval:

Ceci peut être utilisé en toute sécurité pour l'évaluation des chaînes contenant des expressions Python à partir de sources non fiables, sans la nécessité d'analyser les valeurs soi-même.

C'est, d'un coffre-fort 'eval'

>>> import ast
>>> ast.literal_eval("545.2222")
545.2222
>>> ast.literal_eval("31")
31

81voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X