将科学计数法中的数字转换为 int
Converting number in scientific notation to int
有人可以解释为什么我不能使用 int()
将以字符串科学计数法表示的整数转换为 python int
吗?
例如这不起作用:
print int('1e1')
但是这样做:
print int(float('1e1'))
print int(1e1) # Works
为什么 int
不能将字符串识别为整数?确定它就像检查指数的符号一样简单?
在幕后,科学数字表示法在内部始终表示为浮点数。原因是变化的数字范围作为整数仅映射到固定值范围,比方说 2^32
值。科学表示类似于具有显着性和指数的浮动表示。您可以在 https://en.wikipedia.org/wiki/Floating_point.
中查找更多详细信息
您不能将科学数字表示形式直接转换为整数。
print int(1e1) # Works
有效,因为 1e1
作为一个数字已经是一个浮点数。
>>> type(1e1)
<type '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
上使用中间步骤。
因为在 Python 中(至少在 2.x 中因为我不使用 Python 3.x),int()
表现不同关于字符串和数值。 如果您输入一个字符串,那么 python 将尝试将其解析为基数 10 int
int ("077")
>> 77
但是如果你输入一个有效的数值,然后python会根据它的基数和类型来解释它并将它转换为基数为10的整数。然后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 因为它是一个数字值并评估 10.0
并且 int()
将其转换为整数。
所以用一个字符串值调用 int()
,您必须确保该字符串是一个有效的以 10 为基数的整数值。
非常简单的解决方案
print(int(float(1e1)))
步骤:-
1- 首先将科学值转换为浮点数。
2-将该浮点值转换为 int 。
3- 太棒了,你终于可以得到 int 数据类型了。
尽情享受吧。
int(float(1e+001))
可以。
而就像其他人提到的那样,1e1 已经是一个浮点数。
有人可以解释为什么我不能使用 int()
将以字符串科学计数法表示的整数转换为 python int
吗?
例如这不起作用:
print int('1e1')
但是这样做:
print int(float('1e1'))
print int(1e1) # Works
为什么 int
不能将字符串识别为整数?确定它就像检查指数的符号一样简单?
在幕后,科学数字表示法在内部始终表示为浮点数。原因是变化的数字范围作为整数仅映射到固定值范围,比方说 2^32
值。科学表示类似于具有显着性和指数的浮动表示。您可以在 https://en.wikipedia.org/wiki/Floating_point.
您不能将科学数字表示形式直接转换为整数。
print int(1e1) # Works
有效,因为 1e1
作为一个数字已经是一个浮点数。
>>> type(1e1)
<type '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
上使用中间步骤。
因为在 Python 中(至少在 2.x 中因为我不使用 Python 3.x), 如果您输入一个字符串,那么 python 将尝试将其解析为基数 10 int()
表现不同关于字符串和数值。int
int ("077")
>> 77
但是如果你输入一个有效的数值,然后python会根据它的基数和类型来解释它并将它转换为基数为10的整数。然后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 因为它是一个数字值并评估 int
会把它当作一个数值来处理,就好像处理它一样,把它转换成float(10.0)
然后再解析成int。10.0
并且 int()
将其转换为整数。
所以用一个字符串值调用 int()
,您必须确保该字符串是一个有效的以 10 为基数的整数值。
非常简单的解决方案
print(int(float(1e1)))
步骤:- 1- 首先将科学值转换为浮点数。 2-将该浮点值转换为 int 。 3- 太棒了,你终于可以得到 int 数据类型了。
尽情享受吧。
int(float(1e+001))
可以。
而就像其他人提到的那样,1e1 已经是一个浮点数。