Python:错误 34:整数溢出(初学者)
Python: Error 34: Integer overflow (beginner)
我必须在我的程序中处理非常大的整数,但出现以下错误:
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')
对于 number = int(n)
当我输入 8e10000000 作为 n.
有没有办法解决这个问题?
提前致谢。
数字8e10000000
不是整数,是到Python的浮点数。使用 e
表示法的任何数字都被视为浮点数。 Python 使用(通常)64 位浮点格式,不能容纳如此大的数字。
所以问题不是整数,而是你开始的浮点数。错误不在 number = int(n)
行,而是在 n = 8e10000000
行或您使用的任何等效行。
您可以使用
避免该错误
n = 8 * 10**10000000
结果是一个整数。但要小心——在 RAM 中构建整数需要大量时间和内存。 (我的系统执行该命令需要 19 秒。)如果您尝试打印该值,计算机将花费 很长时间 和大量内存来构建要打印的字符串值。
最后,正如其他人指出的那样,您声称的声明与错误消息不符。所以有可能发生了其他事情。如果您希望我们关闭,请显示显示该错误的完整代码片段。
8e10000000
是一个非常大的数字,Python 它表示为一个浮点数。
CPython 通常以 64 位大小存储此浮点数,对于这么大的数字来说太小了。
对于如此大的数字,使用 Decimal
模块是安全的:
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 [=11= 的最大有效值] 是 9,223,372,036,854,775,807(用 sys.maxint
找到)。
因此,python 有一个 decimal
库,它有一个 class decimal.Decimal
documentation here 可以执行任意精度数字。它不会像内存或速度那样高效,但它绕过了浮点数的大小限制和精度问题,尤其是在处理金钱时。
如果您真正使用 inter 值,您可以考虑的另一个选项是使用 long(n)
将您的变量转换为 python 2.5+ 中的任意大整数(在 python 3.0+ int
是一个 long
) 这里有一个 link 到 PEP 237 谈论它。
我必须在我的程序中处理非常大的整数,但出现以下错误:
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')
对于 number = int(n)
当我输入 8e10000000 作为 n.
有没有办法解决这个问题? 提前致谢。
数字8e10000000
不是整数,是到Python的浮点数。使用 e
表示法的任何数字都被视为浮点数。 Python 使用(通常)64 位浮点格式,不能容纳如此大的数字。
所以问题不是整数,而是你开始的浮点数。错误不在 number = int(n)
行,而是在 n = 8e10000000
行或您使用的任何等效行。
您可以使用
避免该错误n = 8 * 10**10000000
结果是一个整数。但要小心——在 RAM 中构建整数需要大量时间和内存。 (我的系统执行该命令需要 19 秒。)如果您尝试打印该值,计算机将花费 很长时间 和大量内存来构建要打印的字符串值。
最后,正如其他人指出的那样,您声称的声明与错误消息不符。所以有可能发生了其他事情。如果您希望我们关闭,请显示显示该错误的完整代码片段。
8e10000000
是一个非常大的数字,Python 它表示为一个浮点数。
CPython 通常以 64 位大小存储此浮点数,对于这么大的数字来说太小了。
对于如此大的数字,使用 Decimal
模块是安全的:
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 [=11= 的最大有效值] 是 9,223,372,036,854,775,807(用 sys.maxint
找到)。
因此,python 有一个 decimal
库,它有一个 class decimal.Decimal
documentation here 可以执行任意精度数字。它不会像内存或速度那样高效,但它绕过了浮点数的大小限制和精度问题,尤其是在处理金钱时。
如果您真正使用 inter 值,您可以考虑的另一个选项是使用 long(n)
将您的变量转换为 python 2.5+ 中的任意大整数(在 python 3.0+ int
是一个 long
) 这里有一个 link 到 PEP 237 谈论它。