2011-08-20 7 views
35

Tengo una aplicación que imprime un valor monetario calculado y quiero mostrar ese valor con el formato de moneda predeterminado.¿Cómo formatear un valor flotante con el formato de moneda del dispositivo?

Por ejemplo en Europa que iba a escribir:

1.000,95 €

En los EE.UU. Creo que usted escribiría

1,000.95 $

En otras monedas que hay más o menos los valores mostrados para la fracción decimal, en EE. UU. sería 2, pero en Japón sería 0.

¿Cómo puedo obtener una fo rmat para todas las monedas existentes?

Respuesta

65

Encontré la solución. La clase NumberFormat tiene una multitud de formateadores predefinidos. También hay uno para formatear valores de moneda.

Si usa el método estático getCurrencyInstance, la clase devolverá un formateador para la moneda predeterminada del dispositivo. Yo uso el siguiente código para establecer mi resultado:

NumberFormat format = NumberFormat.getCurrencyInstance(); 
((TextView) findViewById(R.id.text_result)).setText(format.format(result)); 
+1

variable de resultado está en formato ?? –

+1

¿Qué sucederá en el caso result = 1000, y la configuración regional de su teléfono es FR, pero usted está en los EE. UU.? ¿Va a escribir 1 000 € en lugar de $ 1,000? El formato de moneda no va a dar cuenta de la conversión o el resultado correcto? –

2

Echa un vistazo DecimalFormat.

Tiene una gran variedad de características diseñadas para hacer que sea posible analizar y formato a los números en cualquier localidad, incluido el apoyo para el oeste, árabe, o dígitos índicos. También admite diferentes sabores de números, incluyendo números enteros ("123"), números de punto fijo ("123.4"), notación científica ("1.23E4"), porcentajes ("12%"), y montos de moneda ("$ 123"). Todos estos sabores se pueden localizar fácilmente.

39

Para mayor abundamiento suponga que desea mostrar un precio en la localización actual del teléfono (marca decimal correcta y separador de miles), pero con una moneda de su elección.

NumberFormat format = NumberFormat.getCurrencyInstance(Locale.getDefault()); 
format.setCurrency(Currency.getInstance("CZK")); 
String result = format.format(1234567.89); 

result se mantenga estos valores:

  • CZK1,234,567.89 con entorno local de
  • 1 234 567,89 Kč con la configuración regional Checa

Si desea omitir la parte decimal de los precios (show $199 en vez de $199.00) llama esto antes de usar el formateador:

format.setMinimumFractionDigits(0); 

Todas las opciones se enumeran en NumberFormat docs.

+0

Este enlace es útil para la configuración regional http://stackoverflow.com/questions/4212320/get-the-current-language-in-device?rq=1 –

+0

En caso de que alguien tenga problemas para obtener los símbolos de moneda correctos, aquí hay una alternativa https: //stackoverflow.com/questions/9777689/how-to-get-numberformat-instance-from-currency-code –

0

para obtener dispositivo de configuración regional que podría utilizar esto:

@TargetApi(Build.VERSION_CODES.N) 
    public static Locale getCurrentLocale(Context c) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
      return c.getResources().getConfiguration().getLocales().get(0); 
     } else { 
      //noinspection deprecation 
      return c.getResources().getConfiguration().locale; 
     } 

y luego hacer formato:

 double num = 1323.526; 

     NumberFormat defaultFormat = NumberFormat.getCurrencyInstance(getCurrentLocale(getContext())); 
     defaultFormat.format(num) 
Cuestiones relacionadas