假设我的货币值以刚果货币表示为10.000,00,我希望将其转换为小数量,如10000.00。货币代表可以来自不同的国家,结果应为小数。
我如何在java中实现这一点?
答案 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.)
这样做的原因:你可以处理大多数格式,如
并且您可以自动处理小数位数!= 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"