Cómo formatear un valor de flotador con el formato de moneda del dispositivo?

Tengo una aplicación que imprime un valor de dinero calculado y quiero mostrar ese valor con el formato de moneda predeterminado.

Por ejemplo, en Europa escribiría:

1.000,95 €

En los Estados Unidos creo que escribirías

1.000.95 $

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

¿Cómo puedo obtener un formato exacto como sea posible para todas las monedas existentes?

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

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

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

Por motivos de completitud, supongamos que desea mostrar un precio en la configuració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 tendría entonces estos valores:

  • CZK1,234,567.89 con la localidad estadounidense
  • 1 234 567,89 Kč con la localidad checa

Si desea omitir la parte decimal para los precios (mostrar $199 lugar de $199.00 ) llame a esto antes de usar el formateador:

 format.setMinimumFractionDigits(0); 

Todas las opciones aparecen en NumberFormat de NumberFormat .

Echa un vistazo a DecimalFormat .

Tiene una variedad de características diseñadas para permitir analizar y dar formato a números en cualquier local, incluyendo soporte para dígitos occidentales, árabes o indicadores. También soporta 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%") ). Todos estos sabores pueden ser fácilmente localizados.

Para obtener la configuración regional del dispositivo, puede utilizarla:

 @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) 
  • Configurar el idioma de la aplicación en Preferencias de Android
  • Cambiar idioma mediante programación en Android
  • ¿Cómo obtener el idioma (configuración regional) que muestra actualmente la aplicación para Android?
  • Haciendo clic en un botón para cambiar el idioma
  • Cambio de locale: ¿Forzar la actividad a recargar recursos?
  • ¿Cómo evitar la dirección automática de texto de derecha a izquierda para el hebreo y el árabe?
  • Localización de Android y menú
  • Lengua ucraniana de Android
  • Símbolo de moneda regional
  • Adición de cotizaciones en Java
  • Android: elegir entre dos idiomas sin "locale"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.