Utilizar Formatos Predefinidos

Llamando a los métodos de la clase NumberFormat se pueden formatear números, monedas y porcentajes de acuerdo a la Localidad. Sin embargo, hay un error: NumberFormat podría no soportar la Localidad especificada. Para conocer las definiciones de Locale soportadas por NumberFormat, llamamos al método getAvailableLocales:
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.

Números

Se pueden utilizar los métodos de factoria de NumberFormat para formatear números de tipos de datos primitivos, como double, y sus correspondientes objetos, como Double.

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

Monedas

Si estás escribiendo apliaciones de negocios, necesitarás formatear y mostrar valores en monedas. Las monedas se formatean de la misma forma que los números, excepto en que se llama a getCurrencyInstance para crear el formateador. Cuando se llama al método format , devuelve un String que incluye el número formateado y el signo de moneda apropiado.

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.

Porcentajes

Támbien se pueden utilizar los métodos de la clase NumberFormat para formatear porcentajes. Para obtener el formateador específico de la localidad se llama al método getPercentInstance. Con este formateador, un fracción como 0.75 se mostrará como 75%.

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);

Ozito