java - Android:将欧盟货币解析为数字

标签 java android currency number-formatting

我有一个 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(",", ".") 这对我来说似乎是个坏主意,因为有些货币使用逗号作为数千的分隔符,例如美元,如果我没记错的话。然而,我可以检查语言环境,但所有接缝都是阴暗的 :( 并且可能是错误的......

最佳答案

看来你真的不需要货币格式。使用 NumberFormat.getNumberInstance() 代替:

String value = "10,40";
double d = (Double)NumberFormat.getNumberInstance().parse(value);
BigDecimal price = new BigDecimal(d);

这将抛出 NumberFormatException 以防万一用户以不适合其语言环境的格式输入值(例如,“10,40”代表美国),但在常规情况下应该可以正常工作。

关于java - Android:将欧盟货币解析为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8655583/

相关文章:

android - FFMPEG 幻灯片 - 仅显示第一帧

Java 双重比较 epsilon

java - 实时用户输入的 jFormatedTextField 货币格式

android - 在 FrameLayout 中缩放 ImageView ontouch

java - 在 Anvil 库存中创建和设置 ItemStacks (Bukkit/Spigot API)

java - GWT 在客户端使用 iban4j 进行验证

java - 如何将 hexString 转换为 SWT Color?

android - 使用 'up' 按钮时在 Android 中恢复状态

unicode - 卢比符号在 Firefox 中不起作用

java - 当其中一个方法在子类中被覆盖时,父类如何运行?