Wie konvertiert man String in Float oder Int in Python

  1. float() zur Konvertierung von Strings in Float in Python
  2. int() konvertiert den String in Python zu int
  3. ast.literal_eval um eine Zeichenkette in Python in float oder int zu konvertieren
  4. Lokalisierung und Kommas bei der Konvertierung von Zeichenketten nach Fließkomma in Python
  5. Vergleich der Leistungen verschiedener Methoden zur Konvertierung von String in float oder int in Python

Dieser Tutorial-Artikel stellt vor, wie man String in Python in float oder int konvertiert.

float() zur Konvertierung von Strings in Float in Python

float() konvertiert den String in die float Zeigernummer, wenn möglich.

>>> float('111.2222')
111.2222
>>> float('111.0')
111.0
>>> float('111')
111.0

int() konvertiert den String in Python zu int

int() könnte den String in einen Integer konvertieren, wenn der angegebene String die Repräsentation eines Integers ist. Andernfalls wird es ValueError auslösen.

>>> int('111')
111
>>> int('111.0')
Traceback (most recent call last):
  File "<pyshell#43>", line 1, in <module>
    int('111.0')
ValueError: invalid literal for int() with base 10: '111.0'
>>> int('111.22222')
Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    int('111.22222')
ValueError: invalid literal for int() with base 10: '111.22222'

Sie könnten die Zeichenkette zuerst in Float konvertieren und dann in int umwandeln, wenn die angegebene Zeichenkette die Repräsentation einer Fließkommazahl ist.

>>> int(float('111.0'))
111

ast.literal_eval um eine Zeichenkette in Python in float oder int zu konvertieren

ast.literal_eval(string) wertet die angegebene Zeichenkette, die einen Python-Ausdruck enthält, sicher aus. Es könnte die Zeichenkette entweder automatisch in float oder int konvertieren.

>>> ast.literal_eval('111.2222')
111.2222
>>> ast.literal_eval('111.0')
111.0
>>> ast.literal_eval('111')
111

Lokalisierung und Kommas bei der Konvertierung von Zeichenketten nach Fließkomma in Python

Wenn das Komma , in der String-Darstellung existiert, dann wird die float-Konvertierung eine ValueError-Exception auslösen. Aber Kommas werden in Ländern wie den USA oder Großbritannien regelmäßig entweder als Tausendertrennzeichen verwendet, zum Beispiel 111,111.22, oder als Dezimalzeichen in den meisten europäischen Ländern, zum Beispiel 111,222.

>>> float('111,111.22')
Traceback (most recent call last):
  File "<pyshell#54>", line 1, in <module>
    float('111,111.22')
ValueError: could not convert string to float: '111,111.22'
>>> float('111,111')
Traceback (most recent call last):
  File "<pyshell#55>", line 1, in <module>
    float('111,111')
ValueError: could not convert string to float: '111,111'

Das locale Modul sollte verwendet werden, um die lokalen Informationen zuzuweisen und dann könnte die Funktion locale.atof() die angegebene Zeichenkette als Fließkommazahl entsprechend der lokalen Einstellungen analysieren.

Kommas als Tausender-Trennzeichen in US oder UK

>>> import locale
>>> A = '111,111.222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(A)
111111.222
>>> locale.atof('111,111')
111111.0

Das Komma , könnte richtig interpretiert werden, wenn die richtige Gebietsschema-Einstellung angegeben wird.

Beachten Sie auch, dass das Konvertierungsergebnis immer ein float Typ ist, auch wenn die angegebene Zeichenkettenrepräsentation ein Integer ist.

Kommas als demische Zeichen in europäischen Ländern

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'nl_NL')
'nl_NL'
>>> locale.atof('111,222')
111.222
>>> locale.atof('111.111,222')
111111.222

111.222 wird richtig in 111.222 umgewandelt, und 111.111.222 könnte auch richtig in 1111.222 umgewandelt werden, da der Punkt . in europäischen Ländern wie den Niederlanden als Tausendertrennzeichen verwendet wird.

Vergleich der Leistungen verschiedener Methoden zur Konvertierung von String in float oder int in Python

Wir verwenden timeit, um die Effizienzleistungen zwischen verschiedenen Methoden zu überprüfen.

>>> import timeint
>>> timeit.timeit('float(111.2222)', number=1000000)
0.14707240000007005
>>> timeit.timeit('ast.literal_eval("111.2222")', setup='import ast', number=1000000)
4.779956100000163
>>> timeit.timeit('locale.atof("111.2222")', setup='import locale; locale.setlocale(locale.LC_ALL, "en_US.UTF-8")', number=1000000)
6.092166299999917

Die ast.literal_eval() Methode ist enorm langsamer als die float Methode, wie oben gezeigt. Sie sollte nicht die erste Wahl sein, wenn Sie in Python einfach nur Strings in float oder int konvertieren müssen. ast.literal_eval() ist in dieser Anwendung überdimensioniert, da ihr Hauptziel die Auswertung der Zeichenkette sein sollte, die den Python-Ausdruck enthält.

locale.atof() ist auch extrem langsam, daher sollte es nur verwendet werden, wenn in der Zeichenkette Kommas für die Konvention in US oder UK vorhanden sind, oder Punkt . bedeutet den Tausendertrenner, aber Komma , bedeutet das Dezimalzeichen in europäischen Ländern. Mit anderen Worten, Sie sollten locale.atof() verwenden, wenn es wirklich notwendig ist.

Verwandter Artikel - Python String

  • Wie man eine Zeichenfolge, die eine Zahl enthält, in Python prüft
  • comments powered by Disqus