【发布时间】:2016-07-05 16:04:03
【问题描述】:
为什么科学计数法中的数字总是读作float,我如何将像'1e400'这样的字符串转换为int(对于float来说太大了)?
>>>int('1e400')
ValueError: invalid literal for int() with base 10: '1e400'
>>>int(float('1e400'))
OverflowError: cannot convert float infinity to integer
我知道,我可以制作如下函数:
def strtoint(string):
parts = string.split('e')
if len(parts) == 1:
return int(string)
elif len(parts) == 2:
if int(parts[1])<0:
return int(string)
return int(parts[0])*10**int(parts[1])
else:
return int(string) #raise a error if the string is invalid, but if the variable string is not a string, it may have other way to convert to an `int`
但这不是一个非常pythonic的方法,有没有更好的方法?
【问题讨论】:
-
@snakecharmerb 该问题的答案都假设该数字在
float的范围内,而这个问题明确表示不是。 -
至于为什么
e表示法总是被视为浮点数,那只是因为语法是这样定义的。你无法改变它。 -
@Mark Ransom,但作为一个人类,我将此数字读取为 int,而 xrange(2e6) 读取为 xrange(2000000) 的速度更快,而且出错的空间更小。
-
@12431234123412341234123 我很同情。对于合理范围内的数字,例如
int(2e6)效果很好。
标签: python floating-point int scientific-notation