将科学记数法中的数字转换为int

时间:2015-09-30 08:31:22

标签: python

有人可以解释为什么我不能使用int()将字符串科学记数法中表示的整数转换为python int吗?

例如,这不起作用:

print int('1e1')

但这样做:

print int(float('1e1'))

print int(1e1)  # Works

为什么int无法将字符串识别为整数?当然它就像检查指数的符号一样简单吗?

3 个答案:

答案 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),int()在字符串和数值上的行为不同。如果你输入一个字符串,然后python将尝试将其解析为基础10 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

因此int将把它作为一个数值处理,并将其处理,将其转换为float(10.0),然后将其解析为int。因此Python将首先解释1e1因为它是一个numric值,所以评估10.0int()会将其转换为整数。

因此,使用字符串值调用int()时,必须确保该字符串是有效的10位整数值。