0

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

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

假设它将是 2428859600 对吗?

但它抛出了错误> java.lang.NumberFormatException:对于输入字符串:“002428859600”

我尝试使用:

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

它对我来说很好。

我仍然无法找出发生了什么。数字是不是太大了?

4

5 回答 5

4

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

int i = 2428859600;  // error as 2428859600 is clearly outta int range(2,147,483,647)
long l = 2428859600L; //no error
于 2013-03-11T12:13:29.787 回答
2

是的,您将超出范围的整数值传递给parseInt方法。

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

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

于 2013-03-11T12:13:09.553 回答
1

数字是不是太大了?

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

看到这个

于 2013-03-11T12:13:32.293 回答
-1

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

于 2013-03-11T12:15:38.773 回答
-1

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

于 2013-03-11T12:20:11.870 回答