2009-05-21 19 views
9

Estoy tratando de imprimir precios en Liras turcas (código de moneda ISO 4217 TRY) con Java.¿Cómo anulo los símbolos de moneda en Java?

Cuando hago

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

la salida es: "YTL".

Sin embargo, el símbolo de la moneda para la lira turca ha cambiado recientemente de "YTL" a "TL" (como se puede ver en la página de Wikipedia para Lira turca). El formateo con NumberFormat da un resultado similar.

Realmente no quiero escribir otra clase de moneda, especialmente cuando Java tiene una incorporada.

¿Hay alguna manera de anular el símbolo de moneda por defecto de Java para TRY a "TL"?

+2

Esto no ayuda de inmediato, pero presenta un error y probablemente se solucione en la próxima actualización de Java. –

+1

no hay otra manera que crear su propio contenedor para Moneda. La moneda es una clase final, por lo que no puede extenderse para anular el uso de getSymbol en su caso específico. Ya sea que viva con YTL e informe el error (y espero que se solucione en el siguiente parche) o implemente su propia solución. –

Respuesta

2

En Java 7 puede override currencies en un archivo de propiedades. Si confía en el símbolo ISO-4217, puede especificarse/anularse allí.

+1

Pero ese archivo de propiedades solo contiene información relacionada con ISO 4217. Y ISO 4217 no contiene símbolos de moneda. – user110665

0

Para la media hora mientras espera en Java:

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

Sorprendentemente, según la Wikipedia, el código de moneda "TRL" es obsoleto (el antiguo código de lira turca). No he actualizado a la última JDK, (en 1.5.0_10), pero

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

Lienzo:

TL

Así que tal vez escribir algo de su propia para asignar códigos existentes en obsoletos codifica y ajusta y prueba según sea necesario.

+0

Ser capaz de usar el antiguo código de moneda es un poco afortunado, supongo. Buen hack! – extraneon

+0

Bueno, cayeron seis cero de la moneda antigua, por lo que la diferencia es de hecho de un millón a uno ... ¡ten cuidado con lo que deseas! – vikingsteve

5

resurrección para mayor referencia:

Puede utilizar DecimalFormatSymbols Para cambiar la moneda con fines de formato

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

O puede apelar a SPI y plug-in de su símbolo de moneda (tal vez mediante la creación de su propio variante de país como new Locale("tr","TR","try")). Para hacerlo, debe proporcionar una implementación al java.util.spi.CurrencyNameProvider y registrarla con el mecanismo de extensión de Java. Check out http://java.sun.com/javase/6/docs/api/java/util/spi/LocaleServiceProvider.html

Cuestiones relacionadas