1

以下のコードでは、大きな数値 ~1000000000 を入力すると java.lang.NumberFormatException が発生します。最後から 2 番目の行でエラーが発生します -\

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 を使用して小数分割を解析すると、E.

于 2012-10-24T08:40:59.117 に答える