我有一个EditText其应该工作如下(2.3.3的Android):的Android:解析EU货币成数
用户例如10,40(这是进入10欧元和欧盟货币40美分) - 我想要接下来的String输入并将其转换为BigDecimal(或Number等),以便进一步进行内部计算。
如果用户输入10.40(其中 - 在美元的情况下将等于10美元和40美分),则采用该字符串输入并将其转换为BigDecimal(或数字等等)... ) 例如。
我尝试以下(基于迈克尔Petrotta的答案here),它失败,“ParseException的:无法解析号码10,40):
// German input
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.GERMANY);
// User input
String value = "10,40";
Number valueParsed = formatter.parse(value);
我也试过 “10,40€” 无济于事。所以要么我误解NumberFormat.parse的目的,要么我一直在一个错误的轨道上......我真的想避免使用正则表达式来替换“10,40”中的逗号,因为该版本应该可以在国际上工作,我想要一些干净的,基于语言环境的方法。
编辑
我找到了this question,它解决了同样的问题 - 正确的答案使用与我所做的相同的方法,所以我再次尝试(使用法国作为本地语言),但它仍然失败,这似乎很奇怪。所引用的问题建议使用replaceAll(“,”,“。”),这对我来说似乎是一个坏主意,因为有些货币使用逗号作为数千的分隔符,例如如果我没有弄错的话就用美元。然而,我可以检查语言环境,但所有接缝的阴影:(并可能是错误的...
+1现在想使用正则表达式! – fge 2011-12-28 11:56:54
谢谢 - 是的,在这种情况下使用正则表达式可能是一个真正的痛苦,太多可能会出错(尤其是因为有很多货币,因此有潜在的用户输入方式),我相信这是一个干净的解决方案,只是可以似乎没有找到它:) ... – AgentKnopf 2011-12-28 12:01:41
你想在相同的设备上使用相同的语言环境将“10,40”和“10.40”处理为10.4吗?或者例如在德语区域设置为“10,40”,在美国区域设置为“10.40”? – ernazm 2011-12-28 12:14:10