我的代码很简单:为什么我用这个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