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

如何在java中将不同货币的货币表示形式转换为十进制值,java,Java,假设我的货币价值以刚果货币表示为10.000,00,我希望将其转换为十进制金额,如10000.00。货币代表可以是来自不同国家的任何货币,其结果应为十进制金额 如何在java中实现这一点?最好将货币以整数格式保存在尽可能小的硬币价值中-例如,美元-如果您有1美元和25美分-只需将其保存为整数125美分-这有助于避免java浮点/双倍精度错误的常见问题 最好将货币以整数格式保存在尽可能小的硬币价值内(即美元),如果您有1美元和25美分,只需将其保存为整数125美分即可,这有助于避免java浮点/双

假设我的货币价值以刚果货币表示为10.000,00,我希望将其转换为十进制金额,如10000.00。货币代表可以是来自不同国家的任何货币,其结果应为十进制金额


如何在java中实现这一点?

最好将货币以整数格式保存在尽可能小的硬币价值中-例如,美元-如果您有1美元和25美分-只需将其保存为整数125美分-这有助于避免java浮点/双倍精度错误的常见问题

最好将货币以整数格式保存在尽可能小的硬币价值内(即美元),如果您有1美元和25美分,只需将其保存为整数125美分即可,这有助于避免java浮点/双倍精度错误的常见问题

您可以使用replace,例如:

money.replace(",", "#").replace(".", "").replace("#", ".")
这将为您提供:

10000.00
10000.0
如果要获取十进制值,可以使用:

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.00
10000.0

您可以使用替换,例如:

money.replace(",", "#").replace(".", "").replace("#", ".")
这将为您提供:

10000.00
10000.0
如果要获取十进制值,可以使用:

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.00
10000.0

注意:对于以下内容,我假设不一定事先知道应该使用哪种货币/语言环境


我最近就是这样做的:所有可能的标记(,'应该足够了)的字符串。然后连接除最后一个以外的部分。在添加之前,您需要添加任何小数点符号。所以,“10.000,00”=>10000.00。然后可以将其转换为BigDecimal。 ()

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

  • 1.234,56
  • 1234.56
  • 1'234.56
  • 1234.567
您可以自动处理小数位数!=二,

您只需小心使用空格和不带分数的货币(拆分数组的大小为1)。另外,对于有3个小数位数的货币也要小心。使用这种方法区分完全不使用小数点的金额和使用小数点的金额可能会很麻烦(“1.234”=>“1234.000”和“1.234567”=>“1234.567”)。对于这些情况,您可能需要一些额外的验证和更正


我不知道您是否对此感兴趣,但Java8有一个类,它可以为您提供许多


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

注意:对于以下内容,我假设不一定事先知道应该使用哪种货币/语言环境


我最近就是这样做的:所有可能的标记(,'应该足够了)的字符串。然后连接除最后一个以外的部分。在添加之前,您需要添加任何小数点符号。所以,“10.000,00”=>10000.00。然后可以将其转换为BigDecimal。 ()

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

  • 1.234,56
  • 1234.56
  • 1'234.56
  • 1234.567
您可以自动处理小数位数!=二,

您只需小心使用空格和不带分数的货币(拆分数组的大小为1)。另外,对于有3个小数位数的货币也要小心。使用这种方法区分完全不使用小数点的金额和使用小数点的金额可能会很麻烦(“1.234”=>“1234.000”和“1.234567”=>“1234.567”)。对于这些情况,您可能需要一些额外的验证和更正


我不知道您是否对此感兴趣,但Java8有一个类,它可以为您提供许多

我还建议编写一个单元测试,这样您就可以确保所有预期的输入格式最终都是您想要的格式。当然,我建议对哪些格式被接受/允许进行广泛的文档记录。

方法 正是为了这个目的而制造的。
它负责所有特定于国家/地区的格式设置(小数点或逗号、货币名称、数字前后的货币、千位分组等)

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

结果是“CDF 10000.00”

方法 正是为了这个目的而制造的。
它负责所有特定于国家/地区的格式设置(小数点或逗号、货币名称、数字前后的货币、千位分组等)

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


结果是“CDF 10000.00”

我最近就是这样做的:用所有可能的标记分割字符串(,'应该足够了)。然后连接除最后一个以外的部分。在添加之前,您需要添加任何小数点符号。所以,“10.000,00”=>10000.00。然后可以将其转换为BigDecimal。(不要对货币值使用float或double。)我不知道您是否感兴趣,但Java 8有一个
Currency
类,可以为您提供。您知道应该使用什么货币或语言环境吗?我最近就是这样做的:用所有可能的标记分割字符串(,'应该足够了)。然后连接除最后一个以外的部分。在添加之前,您需要添加任何小数点符号。所以,“10.000,00”=>10000.00。然后可以将其转换为BigDecimal。(不要对货币值使用float或double。)我不知道您是否对此感兴趣,但Java 8有一个
Currency
类,可以为您提供。您知道应该使用哪种货币或语言环境吗?请注意,您必须保留它是哪种货币的信息,因为并非所有货币都有2位十进制值。有些有3个小数,有些没有!此外,在某些金融应用程序中,您可能需要4位小数(=美分/100)。这样,他就无法代表超过2100万美元或更糟糕的2100万印尼盾(1700美元)的参考值