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

0voto

Abhishek Bhatia Punkte 407

Dies ist eine Funktion, die jede object (nicht nur str ) an int o float basierend darauf, ob die tatsächlich gelieferte Zeichenkette sieht aus wie int o float . Wenn es sich außerdem um ein Objekt handelt, das sowohl __float y __int__ Methoden, verwendet es standardmäßig __float__

def conv_to_num(x, num_type='asis'):
    '''Converts an object to a number if possible.
    num_type: int, float, 'asis'
    Defaults to floating point in case of ambiguity.
    '''
    import numbers

    is_num, is_str, is_other = [False]*3

    if isinstance(x, numbers.Number):
        is_num = True
    elif isinstance(x, str):
        is_str = True

    is_other = not any([is_num, is_str])

    if is_num:
        res = x
    elif is_str:
        is_float, is_int, is_char = [False]*3
        try:
            res = float(x)
            if '.' in x:
                is_float = True
            else:
                is_int = True
        except ValueError:
            res = x
            is_char = True

    else:
        if num_type == 'asis':
            funcs = [int, float]
        else:
            funcs = [num_type]

        for func in funcs:
            try:
                res = func(x)
                break
            except TypeError:
                continue
        else:
            res = x

0voto

Shekku Joseph Punkte 17

Mit den Methoden int und float können wir eine Zeichenkette in Ganzzahlen und Fließkommazahlen umwandeln.

s="45.8"
print(float(s))

y='67'
print(int(y))

2 Stimmen

Diese Antwort fügt nichts Neues hinzu. Siehe zum Beispiel, diese Antwort die die gleichen Informationen und mehr enthält.

0voto

mamal Punkte 1211

Für Zahl und Zeichen zusammen:

string_for_int = "498 results should get"
string_for_float = "498.45645765 results should get"

erste Einfuhr re:

 import re

 #for get integer part:
 print(int(re.search(r'\d+', string_for_int).group())) #498

 #for get float part:
 print(float(re.search(r'\d+\.\d+', string_for_float).group())) #498.45645765

für ein einfaches Modell:

value1 = "10"
value2 = "10.2"
print(int(value1)) #10
print(float(value2)) #10.2

0 Stimmen

Eine Erklärung wäre angebracht. Z.B., was soll es tun? Zahlen mit Hilfe eines regulären Ausdrucks extrahieren? Welche Einschränkungen gibt es, wenn überhaupt? Wird es die Zahl "1.32E18" korrekt analysieren? Was ist die Idee/der Sinn? Von das Hilfe-Center : "...erklären Sie immer, warum die von Ihnen vorgestellte Lösung angemessen ist und wie sie funktioniert" . Bitte antworten Sie bis Bearbeitung (Änderung) Ihrer Antwort , nicht hier in den Kommentaren ( ohne "Bearbeiten:", "Aktualisieren:" oder ähnlich - die Antwort sollte so aussehen, als wäre sie heute geschrieben worden).

-1voto

Verwendung:

>>> str_float = "545.2222"
>>> float(str_float)
545.2222
>>> type(_) # Check its type
<type 'float'>

>>> str_int = "31"
>>> int(str_int)
31
>>> type(_) # Check its type
<type 'int'>

-10voto

S.Lott Punkte 371691

Hier ist eine andere Interpretation Ihrer Frage (Hinweis: sie ist vage). Es ist möglich, dass Sie nach etwas wie diesem suchen:

def parseIntOrFloat( aString ):
    return eval( aString )

Das funktioniert so...

>>> parseIntOrFloat("545.2222")
545.22220000000004
>>> parseIntOrFloat("545")
545

Theoretisch gibt es eine Injektionsschwachstelle. Die Zeichenkette könnte z.B. sein "import os; os.abort()" . Ohne Hintergrundinformationen darüber, woher die Schnur stammt, ist diese Möglichkeit jedoch nur theoretische Spekulation. Da die Frage vage ist, ist überhaupt nicht klar, ob diese Schwachstelle tatsächlich existiert oder nicht.

7 Stimmen

Selbst wenn sein Beitrag zu 100% sicher ist, eval() ist mehr als 3-mal so langsam wie try: int(s) except: float(s) .

2 Stimmen

Nun, eval ist schlechte Praxis (Sie müssen es wissen, denn Sie haben 310k Ruf)

0 Stimmen

Es ist der kürzeste Oneliner-Hack; wen interessiert schon Geschwindigkeit...

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