2012-03-28 228 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

相关问题