Deepak Goyal
Deepak Goyal

Reputation: 4907

Get double value from currency frormatted string

I'm using NumberFormat in my app to get the currency formatted Strings. Like if a user inputs 12.25 in the field then it will be changed to $12.25 based on locale. Here the Locale is en-US. Now I want to get the 12.25 value as double form the formatted string. To do that I have used:

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

Above line giving me the result of 12.25 which is my requirement. But suppose a user changed his locale to something else en-UK. Now for that locale above statement is giving me parseException. Because for the locale en-UK, currency string $12.25 is not parsable.

So is there any way to get the double value from currency formatted string irrespective of what the locale is?

Upvotes: 2

Views: 2469

Answers (3)

Jason Krs
Jason Krs

Reputation: 714

Here's a little algorithm that may help you :

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
                }

    }

You should get as result here in the output:

2

1000.75

Upvotes: 0

Deepak Goyal
Deepak Goyal

Reputation: 4907

I don't know either the below solution is perfect or not but it is working according to my requirement.

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;

Upvotes: 1

Gastón Saillén
Gastón Saillén

Reputation: 13129

What about

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

and also you could use

Double.valueOf() creates a Double object so .doubleValue() should not be necessary.

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

could work

Upvotes: 0

Related Questions