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:
- Aplicación de Android con ActionBar NullPointerException con configuración regional no predeterminada
- Localización y travesaños
- Android cambia y establece la configuración regional predeterminada dentro de la aplicación
- ¿Cómo importar / exportar el recurso de cadena de Android a Excel para la localización?
- Android Serbio latino y Montenegro valora la carpeta de strings.xml
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?
- Cómo quitar el campo SECONDS de un DateFormat
- ¿De dónde viene la ubicación y la ubicación actual de Bestest? En Android Dev Guide (Obtención de la ubicación del usuario)
- ¿Cómo obtendría una cadena de fecha corta basada en la configuración regional para Android?
- Formato de moneda en Android utilizando separador decimal incorrecto
- ¿Es posible localizar CalendarView o DatePicker?
- ¿Por qué podría Resources.getString () devolver intermitentemente cadenas de la configuración regional equivocada?
- Valores de localización de Android - ** nombres de carpeta
- Cocos2d-x localización simplificado / chino tradicional
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)
- ¿Qué es más fácil de codificar: aplicación de Android vs iOS aplicación?
- Cómo almacenar el objeto JSON en la base de datos SQLite