Java 17中加拿大法语区货币格式化变更原因咨询
加拿大法语区货币格式化在Java版本间的变更原因
问题现象
运行指定Java代码时出现以下版本差异:
- Java 17及更早版本中,加拿大法语区(
Locale.CANADA_FRENCH)的货币格式化结果为「123 456 789,99 $」 - Java 17版本结果变为「123 456 789,99 $ CA」
- Java 19版本该格式已修正回旧版样式
代码示例
import java.text.NumberFormat; import java.util.Locale; import java.math.BigDecimal; class Main { public static void main(String[] args) { NumberFormat canadaFrench = NumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH); NumberFormat canadaEnglish = NumberFormat.getCurrencyInstance(Locale.CANADA); BigDecimal amount = new BigDecimal("123456789.99"); System.out.println(canadaFrench.format(amount)); System.out.println(canadaEnglish.format(amount)); } }
不同版本输出
Java 17之前
123 456 789,99 $ $123,456,789.99
Java 17
123 456 789,99 $ CA $123,456,789.99
变更原因
Java的国际化与本地化功能依赖ICU(International Components for Unicode)库的规则定义。Java 17版本升级了ICU版本,其中对加拿大法语区的货币格式规则做了调整,要求在货币符号后添加国家代码「CA」。
但该变更不符合加拿大法语区实际的货币使用习惯,因此在Java 19版本中,官方修正了这一规则,移除了多余的国家代码后缀,恢复到Java 17之前的格式。
内容的提问来源于stack exchange,提问作者benzen
相关产品推荐
相关产品推荐

