2015-11-25 68 views
3

我的應用程序的用戶是有一個錯誤和應用程序崩潰的Android - 雙無效「###」

我看了報告和它的說明

產生的原因:java的。 lang.NumberFormatException:無效的雙:「1,36」

我已複製我的應用程序輸入的數據,我沒有這個問題在所有

我甚至問她她的數據庫給我這樣我可以導入確切的數據,它仍然可以爲我工作

我很困惑,當雙是越來越格式一樣,因爲我看不到我的代碼在那裏會得到一個格式化的任何地方,

任何建議,這是怎麼回事?

+1

用戶是法國人嗎?必須是一個語言環境問題 – KeatsPeeks

+3

正如你所看到的那樣,在編號1後面有逗號。並且在你的代碼中的一些地方,你將字符串解析爲double.user可能會輸入數據,如1,36 –

+1

無效的雙精度:「1,36」, - >它是有效的雙精度:「1.36」 – walkmn

回答

1

我面臨同樣的問題。我將float值轉換爲String。是的,它必須是一個地區問題。如其中一條評論所述,某些語言環境使用小數點分隔符。 起初,我將浮喜歡 -

String.format("%.1f", value); 

然後,我改變了代碼

String.format(Locale.ENGLISH, "%.1f", value); 

所以,迫使串用英語本地轉化爲我工作。

2

簡單的方法是(做你parce以上):

if (str.contains(",")) { 
    str.replace(",","."); 
} 
+0

嗨@walkmn感謝您的建議,唯一的問題是,我將不得不這樣做每次雙重是解析,這會有點痛苦,這更多的是解決問題 – Sjharrison

1

您似乎遇到了一個區域設置問題。不同的區域設置有.,作爲分數部分分隔符。您可以使用java.text.NumberFormat來處理您想要的語言環境,例如FRANCE代表逗號,US代表點:

// somewhere at Utils.java: 

public static final NumberFormat DOUBLE_FORMAT = NumberFormat.getInstance(Locale.FRANCE); 

// at call site: 

double d = Utils.DOUBLE_FORMAT.parse("1,234").doubleValue(); 
相關問題