0

csv ファイルから大量のレコードを読み取っています。列の 1 つは金額で、小数点以下 2 桁です。だから私はそれを整数形式に解析したかったのですが、以下のようになるとエラーが発生しました:

int trxnAmt = Integer.parseInt("002428859600");

2428859600になるとしますよね?

しかし、それは私にエラーをスローします> java.lang.NumberFormatException: For input string: "002428859600"

私は使用しようとしました:

long a = Long.parseLong("002428859600");

それは私にとってはうまくいきました。

どうなっているのか、いまだにわかりません。数字が大きすぎませんか?

4

5 に答える 5

4

はい2428859600、長い数字です。int を割り当てようとすると、コンパイラ エラーが発生します。

int i = 2428859600;  // error as 2428859600 is clearly outta int range(2,147,483,647)
long l = 2428859600L; //no error
于 2013-03-11T12:13:29.787 に答える
2

はい、範囲外の整数値をparseIntメソッドに渡しています。

int データ型は、32 ビットの符号付き 2 の補数整数です。最小値は -2,147,483,648 で、最大値は2,147,483,647 (包括的) です。

長いオプションまたは他の適切なオプションを試してください。
これはあなたを助けるかもしれません: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

于 2013-03-11T12:13:09.553 に答える
1

数が多すぎませんか?

はい。anintは 4 バイトであるため、an に収まる最大数intは 2 4*8-1 -1 = 2 31 -1 = 2147483647 (符号には 1 ビットが必要なため 4*8-1) です。

これを参照してください。

于 2013-03-11T12:13:32.293 に答える
-1

を取得してjava.lang.NumberFormatException: For input string: "002428859600"いるのは、数値002428859600を 32 ビット整数 (タイプ ) として表すことができないためintです。64 ビット整数 (タイプ ) として表すことができますlong。Java の長いリテラルは「L」で終わります。002428859600L

于 2013-03-11T12:20:11.870 に答える
-1

入力が実際に整数 (つまり "16") であることを確認するか、整数の範囲外の場合は、またはを使用するDouble.parseDouble()必要があります。Long.parseLong()

于 2013-03-11T12:15:38.773 に答える