gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:54:10 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com