从货币frormatted字符串中获取双倍价值

时间:2018-03-21 15:46:36

标签: java android number-formatting currency-formatting

我在我的应用中使用NumberFormat来获取货币格式化的字符串。就像用户在字段中输入 12.25 一样,它将根据区域设置更改为 $ 12.25 。这里的Locale是 en-US 。 现在我想将12.25值作为格式化字符串的双重格式。 为此,我使用了:

NumberFormat.getCurrencyInstance().parse("$12.25").doubleValue();

上面给出了12.25的结果,这是我的要求。但假设用户将其语言环境更改为 en-UK 。现在对于那个语言环境,上面的语句给了我parseException。因为区域设置 en-UK ,货币字符串 $ 12.25 无法解析。

那么有没有办法从货币格式化的字符串中获取double值,而不管语言环境是什么?

3 个答案:

答案 0 :(得分:1)

我不知道以下解决方案是否完美,但它是按照我的要求工作的。

try {
    return NumberFormat.getCurrencyInstance().parse(currency).doubleValue();
} catch (ParseException e) {
    e.printStackTrace();
    // Currency string is not parsable
    // might be different locale
    String cleanString = currency.replaceAll("\\D", "");
    try {
        double money = Double.parseDouble(cleanString);
        return money / 100;
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
return 0;

答案 1 :(得分:0)

怎么样?
new Double(NumberFormat.getCurrencyInstance().parse("$12.25").doubleValue());

也可以使用

Double.valueOf()创建一个Double对象,因此不需要.doubleValue()。

Double.parseDouble(NumberFormat.getCurrencyInstance().parse("$12.25"));

可行吗

答案 2 :(得分:0)

这里有一些可以帮助您的算法:

public static void main(String[] args)  {

        String cash = "R$1,000.75"; //The loop below will work for ANY currency as long as it does not start with a digit
        boolean continueLoop = true;

                char[] cashArray = cash.toCharArray();      

        int cpt = 0;

                while(continueLoop){
                    try  
                    {  
                        double d = Double.parseDouble(cashArray[cpt]+"");  
                        continueLoop = false;
                    }catch(NumberFormatException nfe){  
                        cpt += 1;  
                    }
                }

                System.out.println(cpt);

                //From here you can do whatever you want....

                String extracted = cash.substring(cpt);

                NumberFormat format = NumberFormat.getInstance(Locale.US); //YOUR REQUIREMENTS !!!! lol
                try {
                    Number youValue = format.parse(extracted);
                    System.out.println(youValue.doubleValue());
                } catch (ParseException ex) {
                    //handle your parse error here
                }

    }

你应该在输出中得到结果:

2

1000.75