如何将“格式化的双精度(字符串)”转换为双精度?

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();

我们必须多次测试软件!!!

2个回答

8

请再次尝试使用NumberFormat

NumberFormat nf=NumberFormat.getInstance(Locale.FRANCE);
String s = "3 456,320";
double d = nf.parse(s);

2

这可能有效:

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

(必须承认,有点肮脏)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接