2

私は少しググってみましたが、解決策を見つけるための例を見つけることができませんでした。これが私の問題です:

String s = "100.000";
long l = Long.parseLong(s);

文字列's'をlongに解析しようとするコードの2行目は、NumberFormatExceptionをスローします。

これを回避する方法はありますか?問題は、10進数を表す文字列が実際にはミリ秒単位の時間であるため、精度が低下するため、intにキャストできないことです。

4

7 に答える 7

4

BigDecimalを使用して、二重解析を処理できます(精度が低下するリスクはありませんDouble.parseDouble())。

BigDecimal bd = new BigDecimal(s);
long value = bd.longValue();
于 2012-10-26T15:28:13.850 に答える
4

あなたの 100.000 が 100 または 100 000 に等しいかどうかはわかりません。私が推奨できる最も安全な解決策は次のとおりです。

NumberFormat nf = NumberFormat.getInstance();
Number number = nf.parse("100.000");
long l = number.longValue();
于 2012-10-26T15:47:36.813 に答える
2

'long'は整数型であるため、小数点が原因で文字列解析が拒否されます。ダブルなど、より適切なタイプを選択すると役立つ場合があります。

于 2012-10-26T15:30:14.353 に答える
0

数千のすべてのスペースホルダー、ドットを削除するだけです...

s.replaceAll(".","");
于 2012-10-26T15:29:39.723 に答える
0

NumberFormat を使用して値を解析する必要があります

于 2012-10-26T17:54:06.453 に答える
0

正規表現を使用して小数部分を切り捨てることができます。次にparseLongを使用します

Long.parseLong( data.replaceAll("\..*", ""));

于 2015-07-12T17:42:35.303 に答える
-2

プレシジョンを緩めたくない場合は、使用する必要がありますmultiplication

    BigDecimal bigDecimal = new BigDecimal("100.111");
    long l = (long) (bigDecimal.doubleValue() * 1000);<--Multiply by 1000 as it
                                                         is miliseconds
    System.out.println(l);

出力:

100111
于 2012-10-26T15:36:13.420 に答える