简体   繁体   中英

Format String currency in java

How can I format this pattern: R$123.456.789,12 to this: 123456789.12?

What I tried:

 String valor_minimo = mSessao.getString("filtro_pedidos_valor").substring(2);
        String valor_maximo = mSessao.getString("filtro_pedidos_valor_maior").substring(2);

        DecimalFormat dec = new DecimalFormat("#.## EUR");
        dec.setMinimumFractionDigits(2);
        String credits = dec.format(valor_maximo);

But that does`t work.

This is a bit messy as my Java is rusty, but I believe what you're looking for is the .replace method. You're likely receiving the IllegalArgumentException because you're trying to format a String.

Give this a try, and rework as needed:

String number = "R$123.456.789,0";
number = number.replace(".", "");
number = number.replace(",", "."); //put this second so the previous line won't wipe out your period
number = number.replace("R", "");
number = number.replace("$", "");

//two ways you can do this. either create an instance of DecimalFormat, or call it anonymously.
//instance call:
DecimalFormat df = new DecimalFormat("#.##");
//now parse the number and feed it to your decimal formatter
number = df.format(Double.parseDouble(number));

//anonymous call:
number = new DecimalFormat("#.##").format(Double.parseDouble(number));

//output test:
System.out.println(number);

Hope this helps!

Edited for a more complete and robust answer.

you may use regex to clean up the format of your string

String cleanStr = inputStr.reaplaceAll("[^0-9,]","").reaplace(",",".");

so you will get simple 123456789.12, which you can parse to double and use as you want

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM