Skip to content

Instantly share code, notes, and snippets.

@jimmyFlash
Last active May 24, 2020 11:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jimmyFlash/a6000e49c9c5cfb79f716834cd8e2fb9 to your computer and use it in GitHub Desktop.
Save jimmyFlash/a6000e49c9c5cfb79f716834cd8e2fb9 to your computer and use it in GitHub Desktop.
Convert a currency formatted string to BigDecimal (double shouldn't be used to represent precision amounts)
import java.math.BigDecimal;
import java.util.Locale;
import java.text.*;
public class CurrencyAmoutBdecimalConverter{
public static void main(String []args)throws ParseException{
final String dollarsA = "$199.00";
final String real = "R$ 399,00";
final String dollarsB = "£25.00";
final String tailingEuro = "90,83 €";
final String dollarsC = "$199.00";
final String dirham = "AED 449.00";
final String noCurrency = "22,550.00";
System.out.println(BigdecimalConverter.parse(dollarsA, Locale.US));
System.out.println(BigdecimalConverter.parse(real, Locale.FRANCE));
System.out.println(BigdecimalConverter.parse(dollarsB, Locale.US));
System.out.println(BigdecimalConverter.parse(tailingEuro, Locale.FRANCE));
System.out.println(BigdecimalConverter.parse(dollarsC, Locale.US));
System.out.println(BigdecimalConverter.parse(dirham, Locale.US));
System.out.println(BigdecimalConverter.parse(noCurrency, Locale.US));
}
}
class BigdecimalConverter{
public static BigDecimal parse(final String amount, final Locale locale) throws ParseException {
final NumberFormat format = NumberFormat.getNumberInstance(locale);
if (format instanceof DecimalFormat) {
((DecimalFormat) format).setParseBigDecimal(true);
}
return (BigDecimal) format.parse(amount.replaceAll("[^\\d.,]",""));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment