-
Wie kann ich eine
str
afloat
?"545.2222" 545.2222
-
Wie kann ich eine
str
aint
?"31" 31
Hinweis: Seien Sie vorsichtig, wenn Sie Geldbeträge als Strings übergeben, da einige Länder "," als Dezimaltrennzeichen verwenden.
Wie kann ich eine str
a float
?
"545.2222" 545.2222
Wie kann ich eine str
a int
?
"31" 31
Hinweis: Seien Sie vorsichtig, wenn Sie Geldbeträge als Strings übergeben, da einige Länder "," als Dezimaltrennzeichen verwenden.
@Emile: Ich würde "2e-3" nicht als "Extremfall" bezeichnen. Diese Antwort ist einfach kaputt.
@BenG Manipulieren Sie das Geld nicht als Umlaufmittel. Das ist ein Grund für Ärger. Verwende Dezimalzahlen für Geld! (Aber Ihr Kommentar über ',' ist immer noch gültig und wichtig)
Wenn Sie nicht abgeneigt sind, Module von Drittanbietern zu verwenden, können Sie sich die fastnumbers Modul. Es bietet eine Funktion namens fast_real die genau das tut, wonach die Frage gestellt wird, und zwar schneller als eine reine Python-Implementierung:
>>> from fastnumbers import fast_real
>>> fast_real("545.2222")
545.2222
>>> type(fast_real("545.2222"))
float
>>> fast_real("31")
31
>>> type(fast_real("31"))
int
Wie kann ich in Python eine numerische Zeichenfolge wie "545.2222" in den entsprechenden Float-Wert 542.2222 umwandeln? Oder wie kann ich die Zeichenkette "31" in eine Ganzzahl, 31, umwandeln? Ich möchte nur wissen, wie man eine Float-Zeichenfolge in eine Float-Zeichenfolge und (separat) eine Int-Zeichenfolge in eine Int-Zeichenfolge parsen kann.
Es ist gut, dass Sie darum bitten, dies getrennt zu tun. Wenn Sie sie vermischen, könnten Sie sich später Probleme einhandeln. Die einfache Antwort ist:
"545.2222"
zu schweben:
>>> float("545.2222")
545.2222
"31"
in eine ganze Zahl umgewandelt:
>>> int("31")
31
Umrechnungen von verschiedenen Basen, und Sie sollten die Basis im Voraus kennen (10 ist der Standard). Beachten Sie, dass Sie ihnen das Präfix voranstellen können, das Python für seine Literale erwartet (siehe unten) oder das Präfix entfernen können:
>>> int("0b11111", 2)
31
>>> int("11111", 2)
31
>>> int('0o37', 8)
31
>>> int('37', 8)
31
>>> int('0x1f', 16)
31
>>> int('1f', 16)
31
Wenn Sie die Basis nicht im Voraus kennen, aber wissen, dass sie das richtige Präfix haben werden, kann Python dies für Sie ableiten, wenn Sie 0
als Basis:
>>> int("0b11111", 0)
31
>>> int('0o37', 0)
31
>>> int('0x1f', 0)
31
Wenn Ihre Motivation darin besteht, dass Ihr eigener Code bestimmte fest kodierte Werte eindeutig darstellt, brauchen Sie die Basen nicht zu konvertieren - das kann Python automatisch mit der richtigen Syntax für Sie erledigen.
Sie können die Apropos-Präfixe verwenden, um eine automatische Konvertierung in Ganzzahlen mit die folgenden Literale . Diese sind für Python 2 und 3 gültig:
Binär, Präfix 0b
>>> 0b11111
31
Oktal, Präfix 0o
>>> 0o37
31
Hexadezimal, Präfix 0x
>>> 0x1f
31
Dies kann bei der Beschreibung von Binärflags, Dateiberechtigungen im Code oder Hex-Werten für Farben nützlich sein - beachten Sie z. B. keine Anführungszeichen:
>>> 0b10101 # binary flags
21
>>> 0o755 # read, write, execute perms for owner, read & ex for group & others
493
>>> 0xffffff # the color, white, max values for red, green, and blue
16777215
Wenn Sie eine ganze Zahl sehen, die mit einer 0 beginnt, ist das in Python 2 die (veraltete) Oktal-Syntax.
>>> 037
31
Das ist schlecht, denn es sieht so aus, als sollte der Wert 37
. Daher wird in Python 3 nun ein SyntaxError
:
>>> 037
File "<stdin>", line 1
037
^
SyntaxError: invalid token
Konvertieren Sie Ihre Python-2-Oktale in Oktale, die sowohl in 2 als auch in 3 funktionieren, mit der 0o
Vorwahl:
>>> 0o37
31
Benutzer codelogic y Harley sind korrekt, aber bedenken Sie, wenn Sie wissen, dass die Zeichenkette eine ganze Zahl ist (z. B. 545), können Sie int("545") aufrufen, ohne vorher in Float zu casten.
Wenn Ihre Zeichenketten in einer Liste stehen, können Sie auch die Funktion map verwenden.
>>> x = ["545.0", "545.6", "999.2"]
>>> map(float, x)
[545.0, 545.60000000000002, 999.20000000000005]
>>>
Es ist nur gut, wenn sie alle vom gleichen Typ sind.
Die Frage scheint ein wenig alt zu sein. Aber lassen Sie mich eine Funktion vorschlagen, parseStr, die etwas Ähnliches macht, d.h. Integer oder Float zurückgibt, und wenn eine gegebene ASCII-Zeichenkette nicht in eine von ihnen umgewandelt werden kann, gibt sie sie unverändert zurück. Der Code kann natürlich angepasst werden, um nur das zu tun, was Sie wollen:
>>> import string
>>> parseStr = lambda x: x.isalpha() and x or x.isdigit() and \
... int(x) or x.isalnum() and x or \
... len(set(string.punctuation).intersection(x)) == 1 and \
... x.count('.') == 1 and float(x) or x
>>> parseStr('123')
123
>>> parseStr('123.3')
123.3
>>> parseStr('3HC1')
'3HC1'
>>> parseStr('12.e5')
1200000.0
>>> parseStr('12$5')
'12$5'
>>> parseStr('12.2.2')
'12.2.2'
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.
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 Beispieltype(100)
führt zuint
so können Sie anrufenint(my_object)
zu versuchen, zu konvertierenmy_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'
.0 Stimmen
Int(x) if int(float(x)) == float(x) else float(x)