separar puntos por pesos numberformat moneda miles formato como colocar clase java format currency

puntos - numberformat java 7



Formateo de monedas en lugares extranjeros en Java (5)

Estoy haciendo todo lo posible para encontrar una forma de formatear monedas extranjeras en diferentes entornos locales que no son predeterminados para esa moneda, utilizando Java. He encontrado java.util.Currency, que puede representar el símbolo adecuado para usar para varias configuraciones regionales. Es decir, para USD, me proporciona el símbolo $ en los EE. UU. Y USD o USD en otras naciones. Además, he encontrado java.text.NumberFormat, que formateará una moneda para una configuración regional específica. Mi problema: util.Currency proporcionará los símbolos y códigos adecuados para representar las monedas en sus configuraciones regionales no predeterminadas, pero no dará formato a la moneda de ninguna manera específica del entorno. NumberFormat asume que el número que lo paso, con una configuración regional, es la moneda de esa configuración regional, no una moneda extranjera.

Por ejemplo, si uso getCurrencyInstance (Locale.GERMANY) y luego formateo (1000) se supone que estoy formateando 1000 euros. En realidad, es posible que necesite la representación localizada en alemán correcta (decimal correcto y separador de miles, ya sea para colocar el símbolo antes o después de la cantidad) para el USD, el Yen o cualquier otra moneda. Lo mejor que he podido derivar hasta ahora es formatear un número con NumberFormat, luego buscar en la salida caracteres que no sean dígitos y reemplazarlos con símbolos derivados de util.Currency. Sin embargo, esto es muy frágil, y probablemente no sea lo suficientemente confiable para mis propósitos. Ideas? Cualquier ayuda es muy apreciada.


Intente usar setCurrency en la instancia devuelta por getCurrencyInstance (Locale.GERMANY)

Roto

java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.GERMANY); System.out.println(format.format(23));

Salida: 23,00 €

Solucionado :

java.util.Currency usd = java.util.Currency.getInstance("USD"); java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.GERMANY); format.setCurrency(usd); System.out.println(format.format(23));

Salida: 23,00 USD


Me gustaría agregar a la respuesta de les2 https://.com/a/7828512/1536382 que creo que el número de dígitos de fracción no se toma de la moneda, debe configurarse manualmente; de ​​lo contrario, si el cliente (NumberFormat) tiene una configuración regional de JAPÓN y la moneda es EURO o en_US, entonces la cantidad se muestra ''a la'' Yen '', sin dígitos de fracción, pero esto no es el esperado, ya que los decimales en euros son relevantes, también para el japonés ;-).

Entonces, el ejemplo les2 podría mejorarse agregando format.setMaximumFractionDigits(usd.getDefaultFractionDigits()); , que en ese caso particular del ejemplo no es relevante pero se vuelve relevante usando un número con decimales y Locale.JAPAN como locale para NumberFormat.

java.util.Currency usd = java.util.Currency.getInstance("USD"); java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance( java.util.Locale.JAPAN); format.setCurrency(usd); System.out.println(format.format(23.23)); format.setMaximumFractionDigits(usd.getDefaultFractionDigits()); System.out.println(format.format(23.23));

saldrá:

USD23 USD23.23

En el código NumberFormat se hace algo similar para la moneda inicial / predeterminada del formato, llamando al método DecimalFormat#adjustForCurrencyDefaultFractionDigits . Esta operación no se realiza cuando la moneda se cambia posteriormente con NumberFormat.setCurrency


Mejor manera es solo importar java.util.Locale

Luego usa el método así:

NumberFormat.getCurrencyInstance (Locale.the Country Countryouou Want);

por ejemplo, NumberFormat.getCurrencyInstance (Locale.US);


import java.util.*; import java.text.*; public class Solution { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double payment = scanner.nextDouble(); scanner.close(); NumberFormat lp; //Local Payment lp = NumberFormat.getCurrencyInstance(Locale.US); System.out.println("US: " + lp.format(payment)); lp = NumberFormat.getCurrencyInstance(new Locale("en", "in")); System.out.println("India: " + lp.format(payment)); lp = NumberFormat.getCurrencyInstance(Locale.CHINA); System.out.println("China: " + lp.format(payment)); lp = NumberFormat.getCurrencyInstance(Locale.FRANCE); System.out.println("France: " + lp.format(payment)); } }


Scanner scanner = new Scanner(System.in); double payment = scanner.nextDouble(); scanner.close(); java.text.NumberFormat formatUS = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.US); String us=formatUS.format(payment); java.text.NumberFormat formatIn = java.text.NumberFormat.getCurrencyInstance(new java.util.Locale("en","in")); String india=formatIn.format(payment); java.text.NumberFormat formatChina = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.CHINA); String china=formatChina.format(payment); java.text.NumberFormat formatFrance = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.FRANCE); String france=formatFrance.format(payment); System.out.println("US: " + us); System.out.println("India: " + india); System.out.println("China: " + china); System.out.println("France: " + france);