【发布时间】:2013-12-22 04:28:15
【问题描述】:
好吧,我很无聊,所以我想做一个二进制>十进制转换器。我将转换器的上限设置为 30 位数 (1073741823) 或 (011111111111111111111111111111)。我遇到的问题是,当我尝试解析 111111111111111111111111111111 时,我得到了 NumberFormatException。这是一些代码:
此代码负责检查字符串是否为数字,而不是将其解析为 int。
if (checkNumber(input)) {
try {
number = Integer.parseInt(input);
} catch (NumberFormatException ex) {
log(ex.getMessage());
}
} else {
toDecimal();
}
这是检查字符串的实际布尔值。
private static boolean checkNumber(String input) {
for (char c : input.toCharArray()) {
if (!Character.isDigit(c)) {
return false;
}
}
return true;
}
这是 NumberFormatException 的输出:
java.lang.NumberFormatException: For input string: "111111111111111111111111111111"
我只是不明白为什么 Java 会抛出这个错误。有什么想法吗?
Integer.parseInt(String, 2);是正确的答案。
【问题讨论】:
-
尝试使用
Long.parseLong -
您的“111...”大于 int 的最大值?试试 Long.parseLong
-
使用带基数的 parseInt (docs.oracle.com/javase/7/docs/api/java/lang/…, int))