You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:41:18