我正在尝试使用 Java 打印土耳其里拉(ISO 4217 货币代码 TRY)的价格。
当我做
Currency curr = Currency.getInstance("TRY");
Locale trLocale = new Locale("tr", "TR");
System.out.println(curr.getSymbol(trLocale));
输出是:“YTL”。
但是,土耳其里拉的货币符号最近从“YTL”更改为“TL”(如土耳其里拉的维基百科页面所示)。使用
NumberFormat
进行格式化会得到类似的结果。
我真的不想再写一个 Currency 类,尤其是当 Java 有一个内置的时候。
有没有办法将 Java 的默认货币符号 TRY 覆盖为“TL”?
复活进一步参考:
您可以使用 DecimalFormatSymbols 更改货币以进行格式化:
Locale trLocale = new Locale("tr", "TR");
DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getCurrencyInstance(trLocale);
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(trLocale);
dfs.setCurrencySymbol("TL");
decimalFormat.setDecimalFormatSymbols(dfs);
或者您可以诉诸 SPI 并插入您的货币符号(也许通过创建您自己的国家/地区变体,如
new Locale("tr","TR","tl")
)。为此,您应该为 java.util.spi.CurrencyNameProvider
提供一个实现,并将其注册到 Java 扩展机制。查看 LocaleServiceProvider 文档.
有趣的是,根据维基百科,货币代码“TRL”已过时(土耳其里拉的旧代码)。我还没有升级到最新的 jdk,(在 1.5.0_10 上),但是
Currency curr = Currency.getInstance("TRL");
Locale trLocale = new Locale("tr", "TR");
System.out.println(curr.getSymbol(trLocale));
印花:
TL
所以也许自己写一些东西来将现有代码映射到过时的代码,并根据需要进行调整和测试。
在 Java 7 中,您可以覆盖属性文件中的货币。如果您依赖 ISO-4217 符号,可以在那里指定/覆盖它。
在等待 Java 的同时:
System.out.println(curr.getSymbol(trLocale).substring(1));