parseInt问题

parseInt("Kona", 10) 抛出 NumberFormatException,为什么?

parseInt("Kona", 27) 返回 411787

有27进制???

把"Kona"作为一个27进制数,返回他对应的十进制数。
和十六进制数变成十进制数一样的。
只是基数不是2,是27。
例如:
kona对应的十进制应该是:k:20 o:24 n:23 a:10
(kona)=20*27*27*27+24*27*27+23*27+10*1

---------------------------------------
public static int parseInt(String s,
int radix)
throws NumberFormatException使用第二个参数指定的基数,将字符串参数解析为有符号的整数。除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D’)外,字符串中的字符必须都是指定基数的数字(通过 Character.digit(char, int) 是否返回一个负值确定)。返回得到的整数值。
如果发生以下任意一种情况,则抛出一个 NumberFormatException 类型的异常:

第一个参数为 null 或一个长度为零的字符串。
基数小于 Character.MIN_RADIX 或者大于 Character.MAX_RADIX。
假如字符串的长度超过 1,那么除了第一个字符可以是减号 '-' ('u002D’) 外,字符串中的任何字符都不是指定基数的数字。
字符串表示的值不是 int 类型的值。
示例:

parseInt("0", 10) 返回 0
parseInt("473", 10) 返回 473
parseInt("-0", 10) 返回 0
parseInt("-FF", 16) 返回 -255
parseInt("1100110", 2) 返回 102
parseInt("2147483647", 10) 返回 2147483647
parseInt("-2147483648", 10) 返回 -2147483648
parseInt("2147483648", 10) 抛出 NumberFormatException
parseInt("99", 8) 抛出 NumberFormatException
parseInt("Kona", 10) 抛出 NumberFormatException
parseInt("Kona", 27) 返回 411787

参数:
s - 包含要分析的整数表示形式的 String
radix - 分析 s 时使用的基数。
返回:
使用指定基数的字符串参数表示的整数。
抛出:
NumberFormatException - 如果 String 不包含可分析的 int。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-02-14
你可以参考十六进制的表示方法和八进制的表示方法来理解
比如一数为15我们可以用十六进制表示为F,而十进制就只能是15。
再看一个数9,我们用十六进制表示时,还是用9,而八进制表示就是11.
上边的例子是相同的parseInt("Kona", 10)会检查第一个字母'K'看是否在10进制表示的范围,显然K大于9,所以抛出 NumberFormatException;同理parseInt("Kona", 27)的K必定在其表示范围之内(1,2....9,A,B,C,D,E,F,G....K,L..)。所以他是一个可以表示为411787。对于进制的问题只是一种表示方法,为了便于显示,一般默认都是在9以后的数字用大写字母来表示。如下:
八进制:01234567
十进制:0123456789
十六进制:0123456789ABCDEF
十七进制: 0123456789ABCDEFG
其他的可以如类似的表示.