私は少しググってみましたが、解決策を見つけるための例を見つけることができませんでした。これが私の問題です:
String s = "100.000";
long l = Long.parseLong(s);
文字列's'をlongに解析しようとするコードの2行目は、NumberFormatExceptionをスローします。
これを回避する方法はありますか?問題は、10進数を表す文字列が実際にはミリ秒単位の時間であるため、精度が低下するため、intにキャストできないことです。
私は少しググってみましたが、解決策を見つけるための例を見つけることができませんでした。これが私の問題です:
String s = "100.000";
long l = Long.parseLong(s);
文字列's'をlongに解析しようとするコードの2行目は、NumberFormatExceptionをスローします。
これを回避する方法はありますか?問題は、10進数を表す文字列が実際にはミリ秒単位の時間であるため、精度が低下するため、intにキャストできないことです。
BigDecimalを使用して、二重解析を処理できます(精度が低下するリスクはありませんDouble.parseDouble()
)。
BigDecimal bd = new BigDecimal(s);
long value = bd.longValue();
あなたの 100.000 が 100 または 100 000 に等しいかどうかはわかりません。私が推奨できる最も安全な解決策は次のとおりです。
NumberFormat nf = NumberFormat.getInstance();
Number number = nf.parse("100.000");
long l = number.longValue();
'long'は整数型であるため、小数点が原因で文字列解析が拒否されます。ダブルなど、より適切なタイプを選択すると役立つ場合があります。
数千のすべてのスペースホルダー、ドットを削除するだけです...
s.replaceAll(".","");
NumberFormat を使用して値を解析する必要があります
正規表現を使用して小数部分を切り捨てることができます。次にparseLongを使用します
Long.parseLong( data.replaceAll("\..*", ""));
プレシジョンを緩めたくない場合は、使用する必要があります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