2013-03-11 33 views
0

我正在读取来自csv文件的大量记录。 其中一列是金额,它有2个小数位。 所以我想它解析为整数形式,但是当来到这个如下它击中了错误:Integer.parseInt()抛出“对于输入字符串:XXX”

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

假设这将是2428859600吗?

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

我试着使用:

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

它为我工作得很好。

我仍然无法找出发生了什么事。这个数字太大了吗?

+0

是的。尝试BigInteger – vikingsteve 2013-03-11 12:12:46

+0

'Integer.MAX_VALUE = 0x7fffffff' - 你的号码是90c574d0,所以是的:对于Integer来说太大了。 – 2013-03-11 12:13:22

回答

4

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

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

是数目过大?

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

请参阅this

-1

你应该确保你的投入确实是一个整数(即“16”),或者如果它出整数范围,然后用Double.parseDouble()Long.parseLong()

-1

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

+0

长文字以“L”结尾与问题没有任何关系。字符串中的数字不是数字文字。 – Jesper 2013-03-11 12:39:39

+0

我并不是说你可以尝试Integer.parseInt(“002428859600L”);解决问题。我刚才提到了异常的根本原因。如果您尝试使用Integer,则会得到相同的异常。parseInt函数( “002428859600L”);你错误地解释了我猜... – 2013-03-11 13:23:04

+0

你的答案的第一句话是正确的; 2428859600不适合32位签名的'int'。但为什么你提到长文字以“L”结尾?这也是事实,但与问题完全无关。 – Jesper 2013-03-11 13:31:38

相关问题