2012-03-28 123 views
0

我需要一個函數,可以解析1123.12和1.123,12到1123.12 有3個我用的數字源,1總是進來美國格式,1將總是在PT_BR(1.123,12)中出現,第三種格式可能以任何格式出現,具體取決於設備的區域設置,我如何正確解析所有這些格式?Android - 如何使用逗號或點分隔字符串作爲小數點分隔符

編輯:我不知道數字格式化的方式,我需要一個函數,可以接收任何這些格式並正確解析它。也許我需要的是測試哪種格式是表示數字的字符串。某些將會收到「1.123,12」並且說是「PT_BR」並且收到1,123.12並且說是「美國」的東西。但我不知道如何做到這一點,特別是如何在任何位置製作這種炒鍋。

+0

也許numberformat可以幫助! http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html – dm03514 2012-03-28 20:11:24

+0

numberformat不能幫助,因爲我不知道在哪種格式我得到的數字。 – user1003997 2012-03-28 20:45:02

+0

我正在使用: NumberFormat nf = NumberFormat.getInstance(); nf.parse(string); – user1003997 2012-03-28 20:46:28

回答

0

你只能得到環境的區域。在字符串的上下文中不存在任何類似語言環境的東西,這完全相反:字符串的含義取決於語言環境。有些情況下,你可以猜出一個字符串表示的數字(比如你​​發佈的數字),但是123456例如呢?這是不明確的,所以沒有圖書館可以做這項工作。顯然,如果你施加一些約束(例如數字必須有兩位十進制數字),你將能夠輕鬆地編寫自己的解析器,但沒有這樣的約定,這是根本不可能的

+0

我在閱讀你的答案之前就已經得出了這個結論。我將不得不格式化來自源的每個數字,在這一點上我知道它是哪種格式。這將是一個漫長的一天! – user1003997 2012-03-28 21:26:28

1

美國:

NumberFormat nf = NumberFormat.getInstance(Locale.US); 
Number number = nf.parse("1,123.12"); 

巴西葡萄牙語:

NumberFormat nf = NumberFormat.getInstance(Locale.forLanguageTag("pt-BR")); 
Number number = nf.parse("1.123,12"); 

默認區域:

NumberFormat nf = NumberFormat.getInstance(); 
Number number = nf.parse("1123.12"); 
+0

但我不知道他們來自哪裏。如果您的美國職能收到1.123,12,它將無法工作。有什麼方法可以知道字符串的語言環境是什麼? – user1003997 2012-03-28 20:36:49

+0

@Jack很好的答案,謝謝! – 2017-05-17 18:20:35

相關問題