2009-05-21 9 views
9

Sto provando a stampare i prezzi in lire turche (codice valuta ISO 4217 TRY) con Java.Come sovrascrivere i simboli di valuta in Java?

Quando faccio

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

l'output è: "YTL".

Tuttavia, il simbolo della valuta per la Lira turca è recentemente cambiato da "YTL" a "TL" (come si può vedere nella pagina di Wikipedia per la Lira turca). La formattazione con NumberFormat dà un risultato simile.

Non voglio davvero scrivere un'altra classe di valuta, specialmente quando Java ha un built-in.

Esiste un modo per sovrascrivere il simbolo di valuta predefinito di Java per TRY su "TL"?

+2

Questo non aiuta immediatamente, ma presenta un bug e probabilmente verrà risolto nel prossimo aggiornamento di Java. –

+1

non c'è altro modo oltre a creare il proprio wrapper per Valuta. La valuta è una classe finale quindi non può nemmeno essere estesa per sovrascrivere getSymbol per il tuo caso specifico. Vivere con YTL e segnalare il bug (e sperare che sia corretto nella patch successiva) o implementare la propria soluzione. –

risposta

2

In Java 7 è possibile override currencies in un file di proprietà. Se stai facendo affidamento sul simbolo ISO-4217, può essere specificato/sovrascritto lì.

+1

Tuttavia, il file delle proprietà contiene solo informazioni correlate a ISO 4217. E ISO 4217 non contiene simboli di valuta. – user110665

0

per il tempo medio mentre siete in attesa su Java:

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

In modo divertente, secondo Wikipedia, il codice valuta "TRL" è obsoleto (il vecchio codice per lire turche). Non ho aggiornato all'ultima jdk, (su 1.5.0_10), ma

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

Stampe:

TL

Quindi, forse, scrivere qualcosa di proprio per mappare i codici esistenti obsoleti codici e regolare e testare se necessario.

+0

Suppongo che poter usare il vecchio codice di valuta sia un po 'di buona fortuna. Bel trucco! – extraneon

+0

Beh, hanno lasciato cadere sei zero dalla vecchia valuta, quindi la differenza è in realtà da un milione a uno ... fai attenzione a ciò che desideri! – vikingsteve

5

Resurrezione per ulteriore riferimento:

È possibile utilizzare DecimalFormatSymbols per cambiare la valuta per scopi di formattazione

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

Oppure si può fare appello a SPI e plug-in vostro simbolo di valuta (forse creando il proprio variante nazionale come new Locale("tr","TR","try")). Per farlo è necessario fornire un'implementazione a java.util.spi.CurrencyNameProvider e registrarla con il meccanismo di estensione Java. Partenza http://java.sun.com/javase/6/docs/api/java/util/spi/LocaleServiceProvider.html

Problemi correlati