2012-06-05 61 views
6

我有一個問題,真的讓我發瘋。通常做int(20.0)會導致20。到現在爲止還挺好。但是:python浮點數到int轉換

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

gex_dict[i]返回浮動,例如, 20.0,其結果是:

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

我只是一個步驟就可以大嚼的最後一塊我的鍵盤。

+1

您可以發佈在'gex_dict'你的內容類型。我認爲你有看起來像浮游物而不是浮游物的字符串。 – jamylak

+0

嗨Jamylak,你是對的,那些是字符串而不是浮動,謝謝! – langohrschnauze

回答

14

'20.0'是一個字符串,而不是float;您可以通過錯誤消息中的單引號來判斷。你可以先用float解析它,然後用int截斷它得到int出來的:

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

(雖然也許你會想儲存漂浮,而不是在你的字典字符串,因爲那是你似乎期待。)

+1

+1,用於建議從源頭解決問題。 – Junuxx

+0

嘿,非常感謝你!!!(那很快!!!) – langohrschnauze

2

它看起來像值是一個字符串,而不是浮動。因此,你需要int(float(gex_dict[i]))

1

的問題是,你有一個字符串,而不是浮動,認爲這是比較:

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

可以通過先轉換爲浮動解決此問題,然後爲int:

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

因此,這將是你的情況:

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

它升ooks喜歡這個問題,gex_dict[i]實際上會返回浮點數'20.0'的字符串表示形式。儘管int()可以從float轉換爲int,並且可以將整數的字符串表示形式轉換爲int。它沒有能力從float的字符串表示形式轉換爲int。

爲INT的文檔可以在這裏找到: http://docs.python.org/library/functions.html#int