我正在解析一个15位数的字符串,如下所示:
String str = "100004159312045";
int i = Integer.parseInt(str);
这样做我得到了一个例外。
为什么? Integer.parseInt
有哪些限制?我有什么其他选择来将这么长的字符串转换为数字?
答案 0 :(得分:25)
你的号码太大而不适合int
,这是32位,范围只有-2,147,483,648到2,147,483,647。
请尝试使用Long.parseLong
。 long
有64位,范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807。
答案 1 :(得分:5)
因为int的最大值略高于2,000,000,000
你可以使用long或BigInteger
long有两倍的数字可以存储(最大值是int的平方),BigInteger可以处理任意大数字
答案 2 :(得分:4)
int是32个有符号位,其最大值是2 ^ 31-1 = 2147483647
答案 3 :(得分:3)
您尝试解析的值超过了整数的最大大小。
答案 4 :(得分:3)
int
的范围介于Integer.MAX_VALUE
和Integer.MIN_VALUE
之间(即从2147483647到-2147483648)。您无法解析该范围外的int
值。
您可以将long m = Long.parseLong(str);
或BigInteger b = new BigInteger(str);
用于大整数。