1

String s="45,333"aを long や double のような数値に変換できませんでした。誰でも問題を解決するのを手伝ってもらえますか..モデルスニペットを追加しました.そのコードを実行しようとするとNumberFormatException..

public static void main(String args[])
{
long a=85200;
NumberFormat numberFormat=NumberFormat.getNumberInstance();
String s=numberFormat.format(a);
Long l=Long.parseLong(s.toString());
System.out.println("The value:"+s);
System.out.println("The value of long:"+l);
}
4

4 に答える 4

14

NumberFormat.parse()の代わりにメソッドを検討してくださいLong.parseLong()

Long.parseLong()String内部に書式設定記号がないことを期待します。

于 2012-04-19T10:39:23.303 に答える
3

混ぜるNumberFormatLong.parseLong()は得策ではありません。

NumberFormatparseXXX()サブクラスのメソッドはNumber「プレーンな」数字(オプションのマイナス記号+数字)のみを読み取るのに対し、ロケールを認識できます(この例では、コンピューターのデフォルトのロケールを使用します)。または、フォーマットパターンを明示的に指定できます。

でフォーマットした場合はNumberFormat、 を使用NumberFormat.parse()して解析する必要があります。ただし、デフォルトのロケールに依存するべきではありません。代わりにロケールを指定してみてください (またはDecimalFormatパターンで使用してください)。そうしないと、厄介で検出が難しいバグに遭遇する可能性があります。

フォーマットを気にしない場合はLong.toString()、長い値を文字列Long.parseLong()に変換し、元に戻すために使用することを検討してください。使いやすく、( とは異なり) スレッド セーフでNumberFormatあり、どこでも同じように動作します。

于 2012-04-19T10:40:09.560 に答える
2

指摘したNumberFormat.parse()ように、次のように使用できます。

public static void main(String args[]) {
    long a=85200;
    NumberFormat numberFormat=NumberFormat.getNumberInstance();
    String s=numberFormat.format(a);
    Long l;
    try {
        l = numberFormat.parse(s.toString()).longValue();
    } catch (ParseException ex) {
        l = 0L;
        // Handle exception
    }
    System.out.println("The value:"+s);
    System.out.println("The value of long:"+l);
}
于 2012-04-19T10:43:07.513 に答える