2017-05-14 113 views
1

突然我得到這之前我沒有錯誤JAVA雙爲字符串格式

例子:

Double double1 = 0.12; 
String string1 = String.format("%.2f", double1) 

System.out.println(string1); 

輸出:

0,12 

然後我做這個

double double2 = Double.parseDouble(string1); 

錯誤

java.lang.NumberFormatException: For input string: "0,12" 

我很確定我來是因爲「,」(逗號)。有趣的是,兩天前任何事情都很好,我也沒有改變任何事情。

不知道發生了什麼,或者我需要改變什麼?

+0

'string1'是'0.12',你是怎麼得到'0,12'的? –

+2

您更改了應用程序的默認語言環境或操作系統。 parseDouble()總是需要一個點。 String.format()使用依賴於區域的小數點分隔符。你不應該使用第一個解析後者產生的東西。 –

回答

4

Double#parseDoubleDouble#toString的格式解析數字。

String#format當被要求格式化一個帶小數點的數字時,會在當前語言環境中輸出,但Double#toString不會。

如果你想分析String#format的輸出,我相信Scanner可以做到這一點。就個人而言,我會避免本地化您希望解析的數字,並使用Double#toString來進行格式化,或者在格式化時明確地通過Locale.ROOT

+0

關於「你知道發生了什麼」 - 操作系統的默認語言環境發生了變化(如JB Nizet所述)。在這個答案中也可以明確提到它,儘管我猜你會含蓄地說出類似的話。 – eis

+0

那是對的,在我使用Locale.UK的代碼中的其他地方,這可能已經改變了應用程序!現在我添加了Locale.US,現在它又可以正常工作了! –