Last active
May 24, 2020 11:43
-
-
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)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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