2014-01-05 52 views
0

我想解析"45,978"以加倍從*.csv讀取。現在我做:解析「45,978」以加倍值

double P_current = Double.parseDouble(priceList.get(j)); 

但是我得到了一些格式異常此字符串輸入:

java.lang.NumberFormatException: For input string: "45,978" 

我知道我可以在我的csv文件改變所有的,.其可能會奏效。但我不想那樣做,因爲我需要這個文件中的逗號。有沒有什麼辦法可以解析這個來加倍as-it-is

我很感謝您的回答!

+0

這個數字應該代表'45978'還是'45.978'? – assylias

+0

'priceList.get(j)= priceList.get(j).replace(「,」,「。」);'。 – Maroun

+0

@assylias我正在研究德語系統',等於.',所以它是'45.978' – user2051347

回答

2
double parsed = Double.parseDouble(priceList.get(j).replace(',', '.')); 

或者你也可以使用DecimalFormat與適當的區域設置或符號。

+0

+1簡單,有效且不受語言環境影響。 –

+0

不要在工作:)區域獨立代碼是壞事。 – MariuszS

+1

@MariuszS根據我們對上下文的瞭解,我們無法判斷是依賴於語言環境還是與語言環境無關是好還是壞。這就是爲什麼這個答案表明兩種解決方案。大多數情況下,一個簡單有效的點對點解決方案比解決不存在問題的過度工程解決方案更好。 –

4

如果你不想取代任何東西,你可以使用NumberNumberFormatLocale#GERMAN

try { 
    NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN); 
    double number = nf.parse("45,978").doubleValue(); 
} catch(ParseException e) { } 

如果你想成爲語言環境無關,你可以簡單地用.取代,保證格式那Double#parseDouble與。

3

您應該根據自己的語言環境使用適當的NumberFormat

NumberFormat format = NumberFormat.getInstance(Locale.GERMAN); 
Number number = format.parse("45,978"); 
double d = number.doubleValue(); 
2

如果你的號碼從英語語言環境都沒有。區域設置更改爲正確的一個:

NumberFormat format = NumberFormat.getInstance(Locale.FRENCH); 
Number number = format.parse("45,978"); 
double d = number.doubleValue(); 

查看更多關於NumberFormathere