使用java将不同的国家货币转换为双倍

use*_*233 11 java currency

我有一个场景,我把货币作为一个字符串,例如:

$ 199.00

R $ 399,00

£25.00

90,83€

AED 449.00

如何在java中将这些货币转换为双倍?

Bor*_*der 19

永远不要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.,]",""));
}
Run Code Online (Sandbox Code Playgroud)

这需要一定String的金额和Locale.然后它创建一个BigDecimal解析NumberFormat实例.它使用replaceAll和正则表达式去除除数字之外的所有数字,.然后,从数字中解析它.

针对您的示例的快速演示:

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";

    System.out.println(parse(dollarsA, Locale.US));
    System.out.println(parse(real, Locale.FRANCE));
    System.out.println(parse(dollarsB, Locale.US));
    System.out.println(parse(tailingEuro, Locale.FRANCE));
    System.out.println(parse(dollarsC, Locale.US));
    System.out.println(parse(dirham, Locale.US));
}
Run Code Online (Sandbox Code Playgroud)

输出:

199.00
399.00
25.00
90.83
199.00
449.00
Run Code Online (Sandbox Code Playgroud)

我只是使用US小数位数.FRANCE小数位数,,Locale如果您愿意,可以使用正确的货币.

  • +1,用于使用NumberFormat.parse处理语言环境。 (2认同)