Integer.parseInt()抛出“For input string:XXX”

时间:2013-03-11 12:11:02

标签: java math

我正在从csv文件中读取大量记录。 列中的一个是金额,它有2个小数位。 所以我想将它解析为整数形式,但是如下所示它遇到错误:

int trxnAmt = Integer.parseInt("002428859600");

假设它是2428859600对吗?

但它会引发我的错误> java.lang.NumberFormatException:对于输入字符串:“002428859600”

我试图使用:

long a = Long.parseLong("002428859600");

它对我来说很好。

我仍然无法知道发生了什么。这个数字太大了吗?

5 个答案:

答案 0 :(得分:4)

2428859600是一个很长的数字。尝试为它分配一个int,你会得到一个编译器错误:

int i = 2428859600;  // error as 2428859600 is clearly outta int range(2,147,483,647)
long l = 2428859600L; //no error

答案 1 :(得分:2)

是的,您正在超出范围整数值到parseInt方法。

  

int数据类型是32位带符号的二进制补码整数。它有   最小值-2,147,483,648,最大值 2,147,483,647   (包括的)。

尝试长期或其他合适的选择 这可能会对您有所帮助:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

答案 2 :(得分:1)

  

这个数字太大了吗?

是。 int是4个字节,因此适合int的最大数字是2 4 * 8-1 -1 = 2 31 -1 = 2147483647(4 * 8-1,因为符号需要1位)。

请参阅this

答案 3 :(得分:-1)

您应确保输入确实是整数(即“16”),或者如果它超出整数范围,则使用Double.parseDouble()Long.parseLong()

答案 4 :(得分:-1)

您收到java.lang.NumberFormatException: For input string: "002428859600"因为,数字002428859600无法表示为32位整数(类型int)。它可以表示为64位整数(类型long)。 Java中的长文字以“L”结尾:002428859600L