10

我正在尝试使用 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”?

4

4 回答 4

7

复活进一步参考:

您可以使用 DecimalFormatSymbols 更改货币以进行格式化

Locale trLocale = new Locale("tr", "TR");
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getCurrencyInstance(trLocale);
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(trLocale);
dfs.setCurrencySymbol("TL");
decimalFormat.setDecimalFormatSymbols(dfs);

或者您可以诉诸 SPI 并插入您的货币符号(也许通过创建您自己的国家/地区变体,例如new Locale("tr","TR","try"))。为此,您应该提供一个实现java.util.spi.CurrencyNameProvider并将其注册到 Java 扩展机制中。查看http://java.sun.com/javase/6/docs/api/java/util/spi/LocaleServiceProvider.html

于 2010-05-21T05:02:59.420 回答
3

有趣的是,根据维基百科,货币代码“TRL”已经过时(土耳其里拉的旧代码)。我还没有升级到最新的 jdk,(在 1.5.0_10 上),但是

Currency curr = Currency.getInstance("TRL");
Locale trLocale = new Locale("tr", "TR");
System.out.println(curr.getSymbol(trLocale));

印刷:

TL

因此,也许自己编写一些东西来将现有代码映射到过时的代码,并根据需要进行调整和测试。

于 2009-05-21T18:45:48.887 回答
2

在 Java 7 中,您可以覆盖属性文件中的货币。如果您依赖 ISO-4217 符号,则可以在此处指定/覆盖它。

于 2009-05-21T18:30:59.803 回答
0

在您等待 Java 的同时:

System.out.println(curr.getSymbol(trLocale).substring(1));
于 2009-05-21T18:35:54.630 回答