2012-06-05 18 views
6

Ich habe ein Problem, das mich wirklich verrückt macht. Normalerweise würde int(20.0) zu 20 führen. So weit, ist es gut. Aber:Python Float in int-Konvertierung

levels = [int(gex_dict[i]) for i in sorted(gex_dict.keys())] 

während gex_dict[i] kehrt ein Schwimmer, z.B. 20.0, ergibt sich:

"invalid literal for int() with base 10: '20.0'" 

Ich bin nur einen Schritt davon entfernt das letzte Stück meiner Tastatur kaut.

+1

Können Sie die Art des Inhalts schreiben Sie in 'gex_dict' haben. Ich denke, Sie haben Strings, die wie Floats statt Floats aussehen. – jamylak

+0

Hallo Jamylak, ja du hast recht, das waren Streicher statt Floats, danke! – langohrschnauze

Antwort

14

'20.0' ist ein String, kein float; Sie können an den einfachen Anführungszeichen in der Fehlermeldung erkennen. Sie können einen int aus ihm heraus, indem sie zuerst mit float Parsen, dann ist es mit int Kürzen:

>>> int(float('20.0')) 
20 

(Obwohl vielleicht die Sie speichern möchten würde statt des Strings im Wörterbuch schwebt, denn das ist, was man ist scheinen zu erwarten.)

+1

+1 für Vorschläge, das Problem an der Quelle zu beheben. – Junuxx

+0

Hey vielen Dank !!! (das war schnell !!!) – langohrschnauze

2

Es sieht aus wie der Wert ist eine Zeichenfolge, kein Float. Sie müssen also int(float(gex_dict[i]))

1

Das Problem ist, dass Sie einen String haben und nicht einen Schwimmer, sehen dies als Vergleich:

>>> int(20.0) 
20 
>>> int('20.0') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '20.0' 

Sie dieses Problem umgehen können, indem man zuerst zu schwimmen konvertieren und dann in int:

>>> int(float('20.0')) 
20 

So wäre es in Ihrem Fall sein:

levels = [int(float(gex_dict[i])) for i in sorted(gex_dict.keys())] 
2

es l ooks wie das Problem ist, dass gex_dict[i] tatsächlich eine String-Darstellung eines Floats '20.0' zurückgibt. Obwohl int() die Möglichkeit bietet, von einem Gleitkommawert in einen int-Wert und eine Zeichenfolgendarstellung einer ganzen Zahl in einen int-Wert zu konvertieren. Es ist nicht in der Lage, von einer Zeichenfolgendarstellung eines Gleitkommaformats in ein int zu konvertieren.

Die Dokumentation für int finden Sie hier: http://docs.python.org/library/functions.html#int