如何将不同货币的货币表示转换为java中的十进制值

时间:2017-04-10 08:08:53

标签: java

假设我的货币值以刚果货币表示为10.000,00,我希望将其转换为小数量,如10000.00。货币代表可以来自不同的国家,结果应为小数。

我如何在java中实现这一点?

4 个答案:

答案 0 :(得分:0)

最好以最小可能的硬币值保持整数格式的货币 - f.e。以美元计算 - 如果你有1美元和25美分 - 只需保存为125美分 - 它有助于避免java浮点/双精度错误的常见问题。

答案 1 :(得分:0)

您可以使用替换例如:

money.replace(",", "#").replace(".", "").replace("#", ".")

这会给你:

10000.00

如果要获取小数值,则可以使用:

String money = "10.000,00";
NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse(money.replace(".", ""));
System.out.println(number);
double d = number.doubleValue();
System.out.println(d);

这会给你:

10000.0

答案 2 :(得分:0)

注意:对于以下内容,我认为事先不必知道预期的货币/区域设置。

我最近这样做:Split所有可能标记的字符串(。,'应该足够了)。然后加入除最后一个之外的部分。在添加之前,添加所需的任何小数符号。所以," 10.000,00" => [[10],[000],[00]] => 10000.00。然后可以将其转换为BigDecimal。 (Don't use float or double for monetary values.

这样做的原因:你可以处理大多数格式,如

  • 1.234,56
  • 1,234.56
  • 1' 234.56
  • 1234.567

并且您可以自动处理小数位数!= 2。

您只需要小心没有分数的空格和货币(分割数组的大小= 1)。还要注意3位数的货币。使用这种方法分开数量可能很麻烦,根本不使用小数和那些做(" 1.234" =>" 1234.000"和" 1.234,567" =>" 1234.567")。您可能需要一些额外的验证和纠正这些案件。

我不知道这对您是否有趣,但Java 8有一个Currency类,可以为您提供fraction digits的数量。

我还建议您编写一个单元测试,这样您就可以确保所有预期的输入格式都以您想要的格式结束。当然,我建议大量记录接受/允许的格式。

答案 3 :(得分:0)

方法NumberFormat.getCurrencyInstance(Locale) 是为了这个目的 它会关注所有特定国家/地区的格式(小数点或逗号,货币名称,数字前后的货币,数千个分组,......)。

你这样使用它,例如刚果(民主共和国):

Locale locale = new Locale("", "CD");
NumberFormat currencyFormat= NumberFormat.getCurrencyInstance(locale);
String s = currencyFormat.format(10000.0);

结果为"CDF 10,000.00"