2013-03-11 54 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

相關問題