2009-05-21 7 views
9

私は、Javaとトルコのリラ(ISO 4217通貨コードTRY)で価格を印刷しようとしています。Javaの通貨記号を上書きするにはどうすればいいですか?

私は

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

を行うと、出力は次のとおりです。 "YTL"。

しかし、トルコリラの通貨記号は、最近「YTL」と「TL」(トルコリラのためのWikipediaのページで見ることができるように)から変更されました。 NumberFormatでフォーマットすると、同様の結果が得られます。

私は本当にJavaは1を内蔵してい場合は特に、さらに別の通貨クラスを記述する必要はありません。

TRYへの「TL」のためのJavaのデフォルトの通貨記号を上書きする方法はありますか?プロパティファイル内のJava 7では

+2

これはすぐに役立つわけではありませんが、バグを報告し、次のJavaアップデートで修正される可能性があります。 –

+1

通貨用の独自のラッパーを作成する以外の方法はありません。 Currencyは最終クラスであるため、特定のケースでgetSymbolをオーバーライドすることもできません。 YTLを使い、バグを報告するか(次のパッチで修正予定)、あるいは独自のソリューションを実装してください。 –

答えて

2

することができますoverride currencies。 ISO-4217シンボルに頼っている場合、そのシンボルを指定/上書きすることができます。平均時間については

+1

しかし、そのプロパティファイルには、ISO 4217関連の情報だけが含まれています。 ISO 4217には通貨記号が含まれていません。 – user110665

0

あなたはJavaを待っている間:

System.out.println(curr.getSymbol(trLocale).substring(1)); 
3

面白いことは、ウィキペディアによると、通貨コード「TRLは」(トルコ・リラの古いコード)廃止されました。私は(1.5.0_10に)、最新のJDKにアップグレードしますが、

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

プリントされていない:

TL

ので、おそらく時代遅れに既存のコードをマップするために、独自の何かを書きます必要に応じて調整してテストしてください。さらに、参照用

+0

古い通貨コードを使用できることは、私が推測する幸運のビットです。ニースハック! – extraneon

+0

まあ、彼らは古い通貨オフ6ゼロのを落とし、その差は実際には1に万人である...あなたが望むものを注意してください! – vikingsteve

5

復活:

あなたが目的

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

それとも、あなた自身を作成することによって、多分(SPIにアピールし、プラグインが、ご使用の通貨記号できるの書式を設定するために通貨を変更するDecimalFormatSymbolsのを使用することができます国別バリアントnew Locale("tr","TR","try")など)。これを行うには、java.util.spi.CurrencyNameProviderに実装を提供し、Java拡張メカニズムで登録する必要があります。チェックアウトhttp://java.sun.com/javase/6/docs/api/java/util/spi/LocaleServiceProvider.html

関連する問題