【发布时间】:2012-01-29 03:31:21
【问题描述】:
我有一个 EditText 应该如下工作(Android 2.3.3):
例如,用户输入 10,40(即 10 欧元和 40 美分的欧盟货币) - 然后我想将该字符串输入转换为 BigDecimal(或数字等),例如进一步的内部计算。
如果用户输入 10.40(在美元的情况下相当于 10 美元和 40 美分),同样应该工作,然后输入该字符串并将其转换为 BigDecimal(或数字等...)例如。
我尝试了以下方法(基于 Michael Petrotta 的回答 here),但失败并显示“ParseException: Unparsable Number 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 现在想使用正则表达式!
-
谢谢 - 是的,在这种情况下使用正则表达式可能会很痛苦,而且太多可能会出错(特别是因为有多种货币和潜在的用户输入方式),我相信有干净的解决方案,似乎找不到它:) ...
-
你想把“10,40”和“10.40”处理成10.4在同一个设备上同一个locale吗?或者在例如德国语言环境中是“10,40”,在美国语言环境中是“10.40”?
-
@emazm:它将基于区域设置(我想我必须相信用户输入与他的区域设置匹配的货币......)。我需要 10.40 将其解析为 Number/BigDecimal,因为 10,40 不会解析。下一个棘手的事情是,如果用户 (EU) 输入 1.000,40 - 因为点是数千个欧盟货币的分隔符(尽管是可选的)。
标签: java android currency number-formatting