切勿使用double来表示确切的金额
使用NumberFormat.虽然它确实处理了一些货币,但通常更容易剥离所有货币符号. NumberFormat将使用Locale来计算要使用的分隔符:
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.,]",""));
}
这需要一个数量的字符串和Locale.然后它创建一个BigDecimal解析NumberFormat实例.它使用replaceAll和regex去除除数字之外的所有数字.然后,从数字然后解析它.
针对您的示例的快速演示:
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