Locale[] locales = NumberFormat.getAvailableLocales();Si NumberFormat no soporta la localidad que necesitamos, podemos crear nuestro propio formateador. Explicaremos este procedimiento en la siguiente sección, Formatear con Patrones.
El siguiente material muestra como obtener formateadores específicos de la localidad para números, monedas y porcentajes. Los códigos de ejemplo son de un programa llamado NumberFormatDemo.java.
En el siguiente fragmento de código, formatearemos un Double de acuerdo a la Localidad. Primero, obtendrémos un ejemplar de NumberFormat específico de la Localidad, llamando a getNumberInstance. Luego llamamos al método format con el Double como argumento. El método format devuelve el número formateado en un String, que está listo para ser mostrado.
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;
numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " + currentLocale.toString());
La salida de este ejemplo muestra como el formato del mismo número varía con la Localidad:
345 987,246 fr_FR
345.987,246 de_DE
345,987.246 en_US
El siguiente código muestra como formatear moneda de una forma específica de la Localidad:
Double currency = new Double(9876543.21);
NumberFormat currencyFormatter;
String currencyOut;
currencyFormatter = NumberFormat.getCurrencyInstance(currentLocale);
currencyOut = currencyFormatter.format(currency);
System.out.println(currencyOut + " " + currentLocale.toString());
La salida genera por las líneas precedentes sería esta:
9 876 543,21 F fr_FR
9.876.543,21 DM de_DE
$9,876,543.21 en_US
A primera vista, esta salida podría parecer errónea, porque los valores numéricos son iguales. Por supesto, 9 876 543,21 F no es equivalente a 9.876.543,21 DM. Sin embargo, recuerda que la clase NumberFormat no puede cambiar monedas. Los métodos pertenecientes a la clase NumberFormat formatean monedas, pero no las convierten.
El siguiente código muetra como formatear porcentajes:
Double percent = new Double(0.75);
NumberFormat percentFormatter;
String percentOut;
percentFormatter = NumberFormat.getPercentInstance(currentLocale);
percentOut = percentFormatter.format(percent);