3

私は次のコードを持っています:

 NumberFormat nf=NumberFormat.getInstance(Locale.FRANCE);
   nf.setMinimumFractionDigits(3);
    String  s=  nf.format(3456.32);
//   double d= Double.valueOf(s); error here
    System.out.println(s);

このコードは次を表示します。

3 456,320

今までは良かったのですが、JFormattedTextField から同じ形式を取得したときに、"3 456,320" を文字列として double(3456.32) に変換する方法を想像してみてください。

私はすでにこれを試しました:

String s="3 456,320";
double d= Double.valueOf(s);

しかし、私はエラーが発生します...

編集

いくつかのテストの後、コードがそれほど堅牢ではないことがわかりました。たとえば、次のようになります。

 //this works
 String s="3456,6567";

 NumberFormat nf1=NumberFormat.getInstance(Locale.FRANCE);

 double d = (double) nf1.parse(s);

しかし、これは:

 String s="3456,0";

 NumberFormat nf1=NumberFormat.getInstance(Locale.FRANCE);

 double d = (double) nf1.parse(s);

このエラーが発生します:

スレッド「メイン」での例外 java.lang.ClassCastException: java.lang.Long は java.lang.Double にキャストできません

短所として、これは非常に堅牢だと思います:

    double d = nf1.parse(s).doubleValue();

ソフトウェアを数回テストする必要があります!!!

4

2 に答える 2

8

もう一度使用してみてくださいNumberFormat

NumberFormat nf=NumberFormat.getInstance(Locale.FRANCE);
String s = "3 456,320";
double d = nf.parse(s);
于 2012-03-11T15:52:38.437 に答える
2

これはうまくいくかもしれません:

Double d = Double.valueOf("3 456,320".replace(" ", "").replace(",", "."));

(認めざるを得ない、少し汚い)

于 2012-03-11T15:53:29.773 に答える