Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:错误34:整数溢出(初学者)_Python_Python 3.x_Integer_Overflow_Integer Overflow - Fatal编程技术网

Python:错误34:整数溢出(初学者)

Python:错误34:整数溢出(初学者),python,python-3.x,integer,overflow,integer-overflow,Python,Python 3.x,Integer,Overflow,Integer Overflow,我必须在我的程序中处理非常大的整数,但我得到以下错误: Traceback (most recent call last): File "[path]", line n, in <module> number = int(numbers[0]*(10**numbers[1])) OverflowError: (34, 'Numerical result out of range') 回溯(最近一次呼叫最后一次): 文件“[path]”,第n行,在 数字=整数(数

我必须在我的程序中处理非常大的整数,但我得到以下错误:

    Traceback (most recent call last):
  File "[path]", line n, in <module>
    number = int(numbers[0]*(10**numbers[1]))
OverflowError: (34, 'Numerical result out of range')
回溯(最近一次呼叫最后一次):
文件“[path]”,第n行,在
数字=整数(数字[0]*(10**数字[1]))
溢出错误:(34,‘数值结果超出范围’)
对于
number=int(n)
,当我输入8e10000000作为n时

有没有办法解决这个问题?
提前感谢。

数字
8e10000000
不是整数,而是Python的浮点数字。任何使用
e
符号的数字都被视为浮点数。Python(通常)使用64位浮点格式,并且不能容纳如此大的数字

所以问题不是整数,而是从浮点开始的。错误不在
number=int(n)
行,而是在
n=8e10000000
行或您使用的任何等效行

您可以通过使用

n = 8 * 10**10000000
这将产生一个整数。但是要小心——在RAM中构建整数需要大量的时间和内存。(我的系统花了19秒来执行一个命令。)如果你试图打印该值,计算机将花费很长时间和大量内存来建立要打印的字符串值


最后,正如其他人指出的,您声明的语句与错误消息不匹配。所以有可能发生了其他事情。如果您想从我们这里得到闭包,请显示显示该错误的整个代码段。

8e10000000
是一个非常大的数字,它表示为一个浮点。
CPython通常以64位大小存储此浮点,对于如此大的数字来说,这太小了

对于如此大的数字,可以安全地使用
十进制
模块:

import sys
from decimal import Decimal

print('max size = ', sys.maxsize)
number = Decimal("8e10000000")
print(number)
产出:

max size =  9223372036854775807
8E+10000000

数字9223372036854775807正好是2^63-1。

您遇到的问题是python是强类型的,但也是动态类型的。8e10000000实际上是python(和C)类型的
float
,是双精度浮点二进制表示的有效值,而python
int
的最大有效值是9223372036854775807(可通过
sys.maxint
找到)

因此,python有一个
decimal
库,它有一个执行任意精度数字的类
decimal.decimal
。它不会像内存或速度那样高效,但它绕过了浮点数的大小限制和精度问题,尤其是在处理金钱时


另一个选择,如果你真的使用互值,则使用<代码>长(n)< /代码>将你的变量用Python 2.5 +(在Python 3 +<代码> INT/COD> >是一个<代码>长)将其转换成一个与它有关的链接。< /P>为什么你需要处理相当大的数字?code>8e10000000是一个巨大的数字您给出的代码(

number=int(8e10000000)
)与回溯中出现的代码不同(
number=int(numbers[0]*(10**numbers[1])
,它们非常不同,因为第一个包含浮点,而第二个只使用整数。请澄清您的问题。在Python 3中,没有最大整数。
sys.maxsize
返回“一个整数,给出Py_ssize_t类型变量可以接受的最大值。在32位平台上通常是2**31-1,在64位平台上通常是2**63-1。”,这与问题完全无关。@Thierrylahuille是的,你说得对。这是Python2。我编辑了我的答案。