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

标签 java currency

<分区>

我有一次将货币作为字符串获取,例如:

199.00 美元

399,00 雷亚尔

25.00 英镑

90,83 欧元

449.00 迪拉姆

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

最佳答案

切勿使用 double 表示确切的金额

当然可以,但是你需要really understand floating point arithmetic

使用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.,]",""));
}

这需要金额的 StringLocale。然后它创建一个 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));
}

输出:

199.00
399.00
25.00
90.83
199.00
449.00

我简单地使用了 US,其中小数点是 .FRANCE,其中小数点是 但你如果您愿意,可以为货币使用正确的 Locale

关于java - 使用java将不同国家的货币转换为双倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23990805/

相关文章:

java - 如何克隆 jtable

java - 如何在 Java 中有效使用模数运算符

javascript - KnockOut 货币绑定(bind)处理程序

currency - 在 Paypal 上使用不受支持的货币

java - 以编程方式关闭当前显示的 Java Swing JDialog 框

java - 简单的定时器程序

java - 如何使用 iText PDF Java 库打开远程目录?

java - Java中的文件传输和对象序列化

java - 为什么 IDR 的 Currency.defaultFractionDigits() 是 0 for android?

c - 更改为货币格式的最佳方法是什么?