1

在下面的代码中,我在输入 ~1000000000 的大数字时收到 java.lang.NumberFormatException。错误发生在倒数第二行 -\

int integer = Integer.parseInt(split[0]);

它应该在理论上工作,因为整数类型支持直到 2^32-1 但它不

Scanner user_input = new Scanner(System.in);
//accept user input and convert into double
String s = user_input.next();
double number = Double.parseDouble(s);
System.out.println(number);

String answer = "";

//Split the entered number into Integer and Decimal parts
String split[] = Double.toString(number).split("\\.");
int integer = Integer.parseInt(split[0]);
int decimal = Integer.parseInt(split[1]);
4

4 回答 4

2

问题可能是因为大双精度数的表示将采用科学记数法:

1.0E9

这将意味着拆分失败,请尝试打印出您正在解析的字符串的值。

当您在 double 上调用 toString 时,使用的格式可能会有所不同,请尝试改用DecimalFormat

new java.text.DecimalFormat("0.00000000").format(number)
于 2012-10-24T08:03:12.513 回答
0

根据Javadoc,当“无法将字符串解析为整数”时会发生这种情况。除其他原因外,如果该值超过Integer.MAX_VALUE或,就会出现这种情况Integer.MIN_VALUE

所以大于约 20 亿或小于负 20 亿的事物(准确地说是 2^31-1 和 -2^31)。您的示例 -1,000,000,000(添加逗号)应该可以工作。

于 2012-10-24T08:02:52.170 回答
0

问题是巨大的数字被表示为相似1.E9或相似。因此,当您进行拆分以获得您将获得的integer价值1以及decimal您将获得E9的不是数字的部分时。

于 2012-10-24T08:03:22.677 回答
0

当然,数字 1000000000 是有效的,但我怀疑字符 ~ 会导致 NumberFormatException。无论如何你应该小心这段代码,因为像这样的数字 1.34184E24 在java中是一个有效的 Double 但是使用 Integer.parseInt 解析十进制拆分也会导致 NumberFormatException 因为有一个 E。

于 2012-10-24T08:40:59.117 回答