Wie kann ich einen String konvertieren, der gerne in Python 123,456.908schwebt 123456.908?
Antworten:
Entfernen Sie einfach das ,mit replace():
float("123,456.908".replace(',',''))
python cd_size = float("737,280,000".replace(',','')) (Ich habe tatsächlich int verwendet)
setlocalein erster Linie.
... Oder anstatt die Kommas als herauszufilternden Müll zu behandeln, könnten wir die Gesamtzeichenfolge als lokalisierte Formatierung des Floats behandeln und die Lokalisierungsdienste verwenden:
from locale import atof, setlocale, LC_NUMERIC
setlocale(LC_NUMERIC, '') # set to your default locale; for me this is
# 'English_Canada.1252'. Or you could explicitly specify a locale in which floats
# are formatted the way that you describe, if that's not how your locale works :)
atof('123,456') # 123456.0
# To demonstrate, let's explicitly try a locale in which the comma is a
# decimal point:
setlocale(LC_NUMERIC, 'French_Canada.1252')
atof('123,456') # 123.456
Extension modules should never call setlocale()
atof eingebaute Methode von Strings . Was ich hier benutze, ist die Funktion atofaus dem localeStandardbibliotheksmodul, die überhaupt nicht veraltet ist.
locale.atof
Wenn Sie das Gebietsschema nicht kennen und eine beliebige Zahl analysieren möchten, verwenden Sie diese parseNumber(text)Funktion . Es ist nicht perfekt, berücksichtigt aber die meisten Fälle:
>>> parseNumber("a 125,00 €")
125
>>> parseNumber("100.000,000")
100000
>>> parseNumber("100 000,000")
100000
>>> parseNumber("100,000,000")
100000000
>>> parseNumber("100 000 000")
100000000
>>> parseNumber("100.001 001")
100.001
>>> parseNumber("$.3")
0.3
>>> parseNumber(".003")
0.003
>>> parseNumber(".003 55")
0.003
>>> parseNumber("3 005")
3005
>>> parseNumber("1.190,00 €")
1190
>>> parseNumber("1190,00 €")
1190
>>> parseNumber("1,190.00 €")
1190
>>> parseNumber("$1190.00")
1190
>>> parseNumber("$1 190.99")
1190.99
>>> parseNumber("1 000 000.3")
1000000.3
>>> parseNumber("1 0002,1.2")
10002.1
>>> parseNumber("")
>>> parseNumber(None)
>>> parseNumber(1)
1
>>> parseNumber(1.1)
1.1
>>> parseNumber("rrr1,.2o")
1
>>> parseNumber("rrr ,.o")
>>> parseNumber("rrr1rrr")
1
Wenn Sie ein Komma als Dezimaltrennzeichen und den Punkt als Tausendertrennzeichen haben, können Sie Folgendes tun:
s = s.replace('.','').replace(',','.')
number = float(s)
Hoffe es wird helfen
Hier ist eine einfache Möglichkeit, die ich für Sie geschrieben habe. :) :)
>>> number = '123,456,789.908'.replace(',', '') # '123456789.908'
>>> float(number)
123456789.908
reist ein großer Hammer für eine solche Aufgabe.
float(number)wegen seiner beschreibenden Note. +1 ;-)
Einfach durch ,replace () ersetzen.
f = float("123,456.908".replace(',',''))
print(type(f)
type () zeigt Ihnen, dass es in einen float konvertiert wurde
Bessere Lösung für verschiedene Währungsformate :
def text_currency_to_float(text):
t = text
dot_pos = t.rfind('.')
comma_pos = t.rfind(',')
if comma_pos > dot_pos:
t = t.replace(".", "")
t = t.replace(",", ".")
else:
t = t.replace(",", "")
return(float(t))
localeModuls - alles andere ist nur ein sehr böser Hack, der Sie in Zukunft in Schwierigkeiten bringen wird.