NumberFormat

Formateando números: NumberFormat

Para comenzar, simplemente comentar que esta clase es muy útil para presentar números por pantalla, teniendo el control en todo momento del formato que tendrán. Más adelante dedicaremos otro post a DecimalFormat, que hereda de esta primera.

NumberFormat es la clase más sencilla de las dos. Principalmente presenta los siguientes métodos:

  • getInstance() - Simplemente obtiene el formato del idioma actual.
  • getCurrencyInstance() - Igual que el anterior, pero con formato de moneda.

y sus respectivas variantes con un parámetro de tipo Locale, que sustituirá al idioma actual.

Para realizar el formato será necesario llamar al método format, como veréis en el ejemplo.

Esta clase supone un componente muy flexible a la hora de formatear números. Como siempre, me apoyaré en la documentación de Java para la explicación, dado que es nuestro más preciado recurso ;-).

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
 
public class PruebaFormatos {
 
	public static void main(String[] args) {
 
		/*
		 * Inicializamos con el método getInstance(), el más sencillo.
		 * Simplemente convierte los números al formato del locale por defecto
		 * (español, en mi caso).
		 */
		NumberFormat nf = NumberFormat.getInstance();
		System.out.println(nf.format(76543210.1234));
		// Resultado: 76.543.210
 
		// Ahora con un locale distinto
		nf = NumberFormat.getInstance(Locale.ENGLISH);
		System.out.println(nf.format(76543210.1234));
		// Resultado: 76,543,210
 
		/*
		 * Método getIntegerInstance, sirve para redondear números decimales.
		 * Ojo, redondear, ¡no truncar!
		 */
		nf = NumberFormat.getIntegerInstance();
		System.out.println(nf.format(123456.789));
		// Resultado: 123.457
 
		// Ahora, en Francés
		nf = NumberFormat.getIntegerInstance(Locale.FRENCH);
		System.out.println(nf.format(123456.789));
		// Resultado: 123 457
 
		/* Os voy a enseñar el cómo se muestra el dinero que tengo en el banco: */
		nf = NumberFormat.getCurrencyInstance();
		System.out.println(nf.format(12345678));
		// Resultado: 12.345.678,00 € (más quisiera yo...)
 
		// Ahora en dólares:
		nf = NumberFormat.getCurrencyInstance(Locale.US);
		System.out.println(nf.format(12345678 * 1.5023));
		// Resultado: $18,546,912.06
 
		/*
		 * Por último, vamos a parsear un número entero. En este caso no aplica
		 * ningún formato.
		 */
		try {
			nf = NumberFormat.getInstance();
			System.out.println(nf.parseObject("76543210 Euros"));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Distribuir contenido