我的代碼很簡單:爲什麼我用這個Integer.parseInt(x,y)得到NumberFormatException?
int idec = Integer.parseInt(value, 16);
當我的價值 「01dae610」 進入,我得到正確的 「31122960」。 當我輸入值「d149e510」時,我得到一個java.lang.NumberFormatException。正確的值是:「3511280912」。
我不知道這是爲什麼。有人可以幫忙嗎?
我的代碼很簡單:爲什麼我用這個Integer.parseInt(x,y)得到NumberFormatException?
int idec = Integer.parseInt(value, 16);
當我的價值 「01dae610」 進入,我得到正確的 「31122960」。 當我輸入值「d149e510」時,我得到一個java.lang.NumberFormatException。正確的值是:「3511280912」。
我不知道這是爲什麼。有人可以幫忙嗎?
因爲這超出了int
的範圍。改爲使用long
/Long
。
int
是在Java中籤 - 這樣的最大值爲2 - 1
如果使用Long.parseLong(value, 16)
你會得到你想要的值。如果您很樂意獲得正確的位模式,則可以將其重新轉換爲int
,但應將其解釋爲負值。
只是因爲它在int
的範圍之外。您應該使用long
數據類型。
Integer.MAX_VALUE
是2147483647,它低於您期望的值。所以這個字符串並不代表任何可以解析成int
的東西。因此例外。
從here:
int數據類型是一個32位有符號二進制補碼整數。它有 最小值-2,147,483,648和最大值2,147,483,647 (含)。
3,511,280,912> 2,147,483,647,其解釋了NumberFormatException
。但是,您可以使用long
。從同一頁:
長數據類型是一個64位有符號二進制補碼整數。它有 最小值-9,223,372,036,854,775,808和最大值 9,223,372,036,854,775,807(含)。
謝謝,我很愚蠢。我以爲我在int範圍內。 – Frans 2011-12-28 22:26:08