2721 Stimmen

Wie kann ich eine Zeichenkette in einen Float oder Int parsen?

  • Wie kann ich eine str a float ?

    "545.2222"    545.2222
  • Wie kann ich eine str a int ?

    "31"          31

19 Stimmen

Generell gilt: Wenn Sie ein Objekt in Python haben und es umwandeln wollen, müssen Sie zu diese Art von Objekt, rufen Sie type(my_object) darauf. Das Ergebnis kann normalerweise als Funktion aufgerufen werden, um die Konvertierung durchzuführen. Zum Beispiel type(100) führt zu int so können Sie anrufen int(my_object) zu versuchen, zu konvertieren my_object in eine ganze Zahl umgewandelt. Das funktioniert nicht immer, ist aber eine gute "erste Vermutung" beim Programmieren.

6 Stimmen

int(x) if int(x) == float(x) else float(x)

5 Stimmen

@tcpaiva ValueError: invalid literal for int() with base 10: '1.5' .

19voto

codelogic Punkte 68703

float("545.2222") y int(float("545.2222"))

1 Stimmen

Damit erhalten Sie ein Float-Objekt, wenn Ihre Zeichenkette zufällig "0" oder "0.0" ist, und nicht das int-Objekt, das es für andere gültige Zahlen gibt.

19voto

Rafe Punkte 1659

El YAML Parser kann Ihnen helfen, herauszufinden, welchen Datentyp Ihre Zeichenkette hat. verwenden yaml.load() und dann können Sie mit type(result) um den Typ zu prüfen:

>>> import yaml

>>> a = "545.2222"
>>> result = yaml.load(a)
>>> result
545.22220000000004
>>> type(result)
<type 'float'>

>>> b = "31"
>>> result = yaml.load(b)
>>> result
31
>>> type(result)
<type 'int'>

>>> c = "HI"
>>> result = yaml.load(c)
>>> result
'HI'
>>> type(result)
<type 'str'>

0 Stimmen

Dies ist eine großartige Antwort (oder json oder was auch immer Sie bevorzugen): Wir alle wissen, dass eine korrekte Umwandlung nicht trivial ist. Finden Sie also eine weit verbreitete Bibliothek, die dies für Sie erledigt :)

0 Stimmen

JSON kann sehr gut funktionieren, löst aber nur einen TypeError aus, wenn ein String übergeben wird, so dass eine benutzerdefinierte Behandlung oder Vorabprüfung erforderlich ist, um einige Versuche zu vermeiden. Wie ich einige Regexp: stackoverflow.com/a/69790897/1236083

15voto

Shameem Punkte 2324

Dazu verwende ich diese Funktion

import ast

def parse_str(s):
   try:
      return ast.literal_eval(str(s))
   except:
      return

Es konvertiert die Zeichenkette in ihren Typ

value = parse_str('1')  # Returns Integer
value = parse_str('1.5')  # Returns Float

2 Stimmen

Bitte beachten Sie, dass parse_str(' 1') (mit einem Leerzeichen) wird zurückgegeben None no 1 .

11voto

Totoro Punkte 841
def get_int_or_float(v):
    number_as_float = float(v)
    number_as_int = int(number_as_float)
    return number_as_int if number_as_float == number_as_int else number_as_float

1 Stimmen

Warum sollten Sie in Ihrem except Abschnitt, wenn Sie dort nichts tun? float() würde für Sie erhöhen.

1 Stimmen

Sie haben Recht, ich denke, ich kopiert und fügen Sie aus einer Funktionalität, die ich war die Erhöhung einer bestimmten Ausnahme. wird bearbeiten.

1 Stimmen

Dies versucht, eine Zeichenkette zu analysieren und gibt entweder int o float je nachdem, wofür die Zeichenfolge steht. Sie kann zu Parsing-Ausnahmen führen oder [ein unerwartetes Verhalten zeigen][1].

10voto

U12-Forward Punkte 64772

Sie könnten verwenden json.loads :

>>> import json
>>> json.loads('123.456')
123.456
>>> type(_)
<class 'float'>
>>> 

Wie Sie sehen können, wird daraus eine Art von float .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X