2012-06-05 19 views
6

Mam problem, który naprawdę doprowadza mnie do szaleństwa. Zwykle wykonanie int(20.0) spowoduje 20. Jak na razie dobrze. Ale:Python float to int konwersji

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

podczas gdy gex_dict[i] zwraca wartość zmiennoprzecinkową, np. 20.0, skutkuje:

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

Jestem krok od przeżuwając ostatni kawałek mojej klawiaturze.

+1

można zakładać rodzaj treści masz na 'gex_dict'. Myślę, że masz struny, które wyglądają jak pływaki zamiast pływaków. – jamylak

+0

Cześć Jamylak, tak masz rację, to były struny zamiast pływaków, dzięki! – langohrschnauze

Odpowiedz

14

'20.0' to ciąg znaków, a nie float; możesz powiedzieć przez pojedyncze cudzysłowy w komunikacie o błędzie. Można uzyskać int z niego przez pierwsze parsowanie go float, a następnie odcięcie go int:

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

(choć może tylko chcesz do sklepu pływaków zamiast strun w swoim słowniku, ponieważ to jest to, czego wydaje się oczekiwać.)

+1

+1 za sugerowanie rozwiązania problemu u źródła. – Junuxx

+0

Hej, dziękuję wam bardzo !!! (to było szybkie !!!) – langohrschnauze

2

Wygląda na to, że wartość jest łańcuchem, a nie zmienną. Więc trzeba int(float(gex_dict[i]))

1

Problem polega na tym, że masz ciąg, a nie unosić, to za porównania:

>>> 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' 

Można obejść ten problem, najpierw przekształcając się unosić, a potem do int:

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

Tak byłoby w przypadku:

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

to l Ooki takie jak ten problem polegają na tym, że gex_dict[i] faktycznie zwraca ciąg znaków reprezentujący float '20.0'. Chociaż int() ma możliwość rzutowania z float na int i string reprezentacji liczby całkowitej do int. Nie ma możliwości rzutowania z reprezentacji łańcuchowej float na int.

Dokumentacja dla int można znaleźć tutaj: http://docs.python.org/library/functions.html#int