有人可以解释为什么我不能使用int()
将字符串科学记数法中表示的整数转换为python int
吗?
例如,这不起作用:
print int('1e1')
但这样做:
print int(float('1e1'))
print int(1e1) # Works
为什么int
无法将字符串识别为整数?当然它就像检查指数的符号一样简单吗?
答案 0 :(得分:5)
在幕后,科学数字表示法总是在内部表示为浮点数。原因是变化的数字范围,因为整数只映射到固定值范围,比如说2^32
值。科学表示类似于具有重要和指数的浮动表示。您可以在https://en.wikipedia.org/wiki/Floating_point中查找更多详细信息。
您不能直接将科学数字表示作为字符串转换为整数。
print int(1e1) # Works
有效,因为1e1
作为数字已经是浮点数。
>>> type(1e1)
<type 'float'>
回到你的问题:我们想从float或科学字符串中获取一个整数。详情:https://docs.python.org/2/reference/lexical_analysis.html#integers
>>> int("13.37")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '13.37'
对于浮点或科学表示,您必须使用float
上的中间步骤。
答案 1 :(得分:2)
非常简单的解决方案
print(int(float(1e1)))
步骤:- 1-首先,您将科学价值转换为浮点数。 2-将该浮点值转换为int。 3-太好了,您终于可以得到int数据类型。
答案 2 :(得分:0)
因为在Python中(至少在2.x中因为我不使用Python 3.x),如果你输入一个字符串,然后python将尝试将其解析为基础10 int()
在字符串和数值上的行为不同。int
int ("077")
>> 77
但是如果你输入一个有效的数值,那么python会根据它的基数和类型解释它并将它转换为基数10 int。然后python将首先插入077
作为基数8并将其转换为基数10,然后int()
将显示它。
int (077) # Leading 0 defines a base 8 number.
>> 63
077
>> 63
因此,int('1e1')
将尝试将1e1
解析为基数为10的字符串,并将抛出ValueError
。但是1e1
是一个数值(数学表达式):
1e1
>> 10.0
因此因此Python将首先解释1e1因为它是一个numric值,所以评估int
将把它作为一个数值处理,并将其处理,将其转换为float(10.0)
,然后将其解析为int。10.0
和int()
会将其转换为整数。
因此,使用字符串值调用int()
时,必须确保该字符串是有效的10位整数值。