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 回答