如何将“格式化的double(String)”转换为double?

如何将“格式化的double(String)”转换为double?

问题描述:

我有以下代码:如何将“格式化的double(String)”转换为double?

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“作为字符串加倍(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(); 

我们必须多次测试软件!

再次尝试使用NumberFormat

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

+1,由于其作品:-) – 2012-03-11 16:40:56

+0

问题已更新,请更新:-) – 2012-03-13 00:10:08

这可能工作:

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

(必须承认,但脏)

+0

其作品的回应也是,但我会使用解析(s); ... – 2012-03-11 16:41:52