2012-03-11 84 views
3

我有以下代碼:如何將「格式化的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(); 

我們必須多次測試軟件!

回答

8

再次嘗試使用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

1

這可能工作:

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

(必須承認,但髒)

+0

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

相關問題