-
Wie kann ich eine
str
afloat
?"545.2222" 545.2222
-
Wie kann ich eine
str
aint
?"31" 31
Diese Antwort fügt nichts Neues hinzu. Siehe zum Beispiel, diese Antwort die die gleichen Informationen und mehr enthält.
Wie kann ich eine str
a float
?
"545.2222" 545.2222
Wie kann ich eine str
a int
?
"31" 31
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
Diese Antwort fügt nichts Neues hinzu. Siehe zum Beispiel, diese Antwort die die gleichen Informationen und mehr enthält.
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
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).
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.
Selbst wenn sein Beitrag zu 100% sicher ist, eval()
ist mehr als 3-mal so langsam wie try: int(s) except: float(s)
.
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)