pattern number moneda jasperreport formato java localization locale currency

java - number - formato moneda jasperreport



No obtener símbolos de moneda para la configuración regional específica (3)

Está viendo lo que Java cree que los usuarios en su ubicación predeterminada esperan ver para un símbolo de moneda. Esto también es confirmado por los Javadocs para getSymbol() :

Obtiene el símbolo de esta moneda para la configuración regional predeterminada. Por ejemplo, para el dólar estadounidense, el símbolo es "$" si la configuración regional predeterminada es EE.UU., mientras que para otras configuraciones regionales puede ser "US $". Si no se puede determinar ningún símbolo, se devuelve el código de moneda ISO 4217.

Al cambiar su configuración regional predeterminada:

Locale.setDefault(Locale.UK); // e.g.

Puedes experimentar para probar esto por ti mismo. ( Nota: no estoy sugiriendo que esto sea una solución, simplemente una oportunidad para que compruebe lo que ven otras localidades ).

Le recomendaría que se limite a lo que Java considere apropiado para su configuración regional predeterminada, estoy seguro de que sus usuarios lo entenderán.

Puede parecer atractivo buscar el símbolo de moneda "normal" para cada moneda, sin embargo, consulte la siguiente lista de monedas: http://www.xe.com/symbols.php .

Mira cuántos países reconocen su moneda con un símbolo $ . Egipto también usa el símbolo de la libra británica ( £ ). La idea detrás del símbolo de moneda de la configuración regional es proporcionarle una cadena que los usuarios de su configuración regional entiendan.

Estoy tratando de obtener los símbolos de las monedas en función de su configuración regional. Pero en lugar de devolver un símbolo, está devolviendo el código. Tengo un fragmento

import java.util.Currency; import java.util.Locale; public class CurrencyFormat { public void displayCurrencySymbols() { Currency currency = Currency.getInstance(Locale.US); System.out.println("United States: " + currency.getSymbol()); } public static void main(String[] args) { new CurrencyFormat().displayCurrencySymbols(); } }

Para Locale.US está dando el símbolo $ pero si reemplazo

Currency currency = Currency.getInstance(Locale.US);

con

Currency currency = Currency.getInstance(Locale.GERMANY);

Entonces en lugar de símbolo está dando el código del país. ¿Por qué es esto y cómo podemos obtener los símbolos?

EDITAR: Después de buscar una respuesta, me gustaría aclarar que establecer una configuración local predeterminada específica no es una solución, ya que necesito que se muestren todos los signos disponibles de una vez .

p.ej

Locale.setDefault(Locale.UK);

me dará el signo del euro, pero para doller le dará el código en lugar del signo de doller ($).


Una solución más simple, basada en la respuesta de :

Simplemente agregue la configuración regional como un parámetro al método getSymbol() .

Por lo tanto, cambie su código a:

import java.util.Currency; import java.util.Locale; public class CurrencyFormat { public void displayCurrencySymbols() { Currency currency = Currency.getInstance(Locale.US); System.out.println("United States: " + currency.getSymbol(Locale.US)); } public static void main(String[] args) { new CurrencyFormat().displayCurrencySymbols(); } }


hola, por favor intente el siguiente código

import java.text.NumberFormat; import java.util.Comparator; import java.util.Currency; import java.util.Locale; import java.util.SortedMap; import java.util.TreeMap; public class CurrencyExample { public static void main(String[] args) { Utils.getCurrencySymbol( Currency.getInstance(Locale.US).getCurrencyCode()); Utils.getCurrencySymbol(Currency.getInstance(Locale.JAPAN).getCurrencyCode()); Utils.getCurrencySymbol(Currency.getInstance(Locale.UK).getCurrencyCode()); Utils.getCurrencySymbol("INR"); } } class Utils{ public static SortedMap<Currency, Locale> currencyLocaleMap; static { currencyLocaleMap = new TreeMap<Currency, Locale>(new Comparator<Currency>() { public int compare(Currency c1, Currency c2){ return c1.getCurrencyCode().compareTo(c2.getCurrencyCode()); } }); for (Locale locale : Locale.getAvailableLocales()) { try { Currency currency = Currency.getInstance(locale); currencyLocaleMap.put(currency, locale); }catch (Exception e){ } } } public static String getCurrencySymbol(String currencyCode) { Currency currency = Currency.getInstance(currencyCode); System.out.println( currencyCode+ ":-" + currency.getSymbol(currencyLocaleMap.get(currency))); return currency.getSymbol(currencyLocaleMap.get(currency)); } }

La salida del programa anterior es así:

USD:-$ JPY:-¥ GBP:-£ INR:-Rs.