【发布时间】:2012-06-12 17:21:52
【问题描述】:
为什么会这样?我正在解析的字符串看起来很像一个 int。该程序正在从一个文件中读取,我知道它工作得最多,因为这个数字在列表中很靠后。有任何想法吗?另外,该程序正在解析大于 22 亿的整数,所以我不知道这是否是一个大小问题。
【问题讨论】:
-
听起来您已经知道问题出在哪里了。
标签: java exception numberformatexception
为什么会这样?我正在解析的字符串看起来很像一个 int。该程序正在从一个文件中读取,我知道它工作得最多,因为这个数字在列表中很靠后。有任何想法吗?另外,该程序正在解析大于 22 亿的整数,所以我不知道这是否是一个大小问题。
【问题讨论】:
标签: java exception numberformatexception
带符号的 32 位 int 只能为 2^31 或 0x7FFFFFFF (2,147,483,647)。您需要使用更大的数据类型。 long 将让您达到 2^63。或者BigInteger 类会给你一个任意大小的整数。
【讨论】:
unsigned int 这样的东西 :(
int 的最小值可以为-2,147,483,648,最大值为2,147,483,647(含),您的号码(来自字符串)超出范围
使用long 代替Long.parseLong(3291105000) 会为您工作
【讨论】:
使用long,可以容纳64位整数。
ints 最多只能保存约 20 亿个整数longs 最多可以容纳 ~9e18 的整数【讨论】:
就像其他人说的那样,这个数字显然超出了 int 的范围,因此你得到了异常。
4 字节,有符号(二进制补码)。 -2,147,483,648 至 2,147,483,647。像所有数字类型一样,int 可以转换为其他数字类型(byte、short、long、float、double)。当有损转换完成时(例如 int 到 byte),转换是以较小类型的长度为模完成的。
【讨论】: