python float to int转换

时间:2012-06-05 13:28:13

标签: python floating-point

我有一个让我疯狂的问题。通常,执行int(20.0)会导致20。到现在为止还挺好。但是:

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

我离咀嚼最后一块键盘只有一步之遥。

4 个答案:

答案 0 :(得分:15)

'20.0'是一个字符串,而不是float;你可以通过错误消息中的单引号来判断。您可以首先使用int进行解析,然后使用float将其截断:

,从中获取int
>>> int(float('20.0'))
20

(虽然你可能想在你的字典中存储花车而不是字符串,因为这是你似乎期待的。)

答案 1 :(得分:2)

看起来值是字符串,而不是浮点数。所以你需要int(float(gex_dict[i]))

答案 2 :(得分:2)

看起来问题是gex_dict[i]实际上返回了一个浮点'20.0'的字符串表示。虽然int()具有从float转换为int的能力,以及整数到int的字符串表示形式。它没有能力从float的字符串表示形式转换为int。

int的文档可以在这里找到: http://docs.python.org/library/functions.html#int

答案 3 :(得分: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'

您可以通过先转换为float然后转换为int来解决此问题:

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

所以情况就是这样:

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