Java 18与Java 19的货币格式化差异问题咨询
Java 18 迁移至 Java 19 时加拿大法语 locale 货币格式化输出差异说明
这是预期变更,并非你的操作有误。
差异的根源在于 Java 19 升级了依赖的 Unicode CLDR(通用区域数据仓库)版本,其中针对加拿大法语(Locale.CANADA_FRENCH)的货币格式规则被调整:不再默认显示货币代码"CA",仅保留货币符号"$"。这类区域数据的更新通常不会单独出现在 Java 版本的核心发布说明中,而是包含在 CLDR 版本升级的相关备注里。
如果需要强制恢复 Java 18 的输出样式(显示货币代码),可以通过自定义格式模式实现:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH); currencyFormatter.setMaximumFractionDigits(2); currencyFormatter.setCurrency(Currency.getInstance(Locale.CANADA_FRENCH)); // 自定义格式,添加货币代码显示 if (currencyFormatter instanceof DecimalFormat decimalFormat) { DecimalFormatSymbols symbols = decimalFormat.getDecimalFormatSymbols(); decimalFormat.applyPattern("#,##0.00 ¤ ¤¤"); decimalFormat.setDecimalFormatSymbols(symbols); } var result = currencyFormatter.format(100); System.out.println(result); // 输出 100,00 $ CA
内容的提问来源于stack exchange,提问作者Jakub Bręk
相关产品推荐
相关产品推荐

