Java 8中按Locale.CANADA_FRENCH将100.00格式化为$US样式美元货币
问题描述
需要在Locale.CANADA_FRENCH环境下将数值100.00转换为货币格式,要求使用美元(USD),货币标识为"$US",不能采用拼接国家代码的硬编码方式,使用Java 8实现,询问是否可通过传入Locale或货币代码等方法实现。
已尝试的实现方式
代码示例1
String amount = "100.00"; NumberFormat format = NumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH); format.setCurrency(Currency.getInstance("USD")); System.out.println(format.format(new BigDecimal(amount)));
输出结果:100,00 USD
代码示例2
String amount = "100.00"; NumberFormat format = NumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH); DecimalFormat df = (DecimalFormat) format; df.getDecimalFormatSymbols().setCurrency(Currency.getInstance("USD")); System.out.println(format.format(new BigDecimal(amount)));
输出结果:100,00 $
解决方案
Java 8中,默认的Locale.CANADA_FRENCH与USD货币组合不会自动生成"$US"格式,因为该格式并非标准本地化格式。要实现需求,可通过自定义DecimalFormat的货币符号来完成,同时保留Locale的数值格式化规则(比如小数分隔符),避免硬编码拼接:
String amount = "100.00"; // 获取加拿大法语环境的货币格式化器 DecimalFormat df = (DecimalFormat) NumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH); // 设置货币为USD df.setCurrency(Currency.getInstance("USD")); // 获取格式化符号实例,修改货币符号为"$US" DecimalFormatSymbols symbols = df.getDecimalFormatSymbols(); symbols.setCurrencySymbol("$US"); df.setDecimalFormatSymbols(symbols); System.out.println(df.format(new BigDecimal(amount)));
输出结果:100,00 $US
这种方式既复用了Locale.CANADA_FRENCH的数值格式规则,又设置了指定的货币符号,且没有硬编码拼接数值与符号,符合需求。
内容的提问来源于stack exchange,提问作者Prajeeth Anand
相关产品推荐
相关产品推荐

