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

Su voto: Nada Promedio: 4.4 (5 votos)

bien amigo gracias por el aporte una duda tendo, digamos que yo quiro mostrar una traduccion de monedas a diferentes paices como lo aria

Sería tan sencillo como definir varias instancias de NumberFormat, cada una con su locale correspondiente, y entonces imprimir la cadena resultante de concatenar todas las llamadas al método format de cada instancia.
Algo así:

NumberFormat nf1 = NumberFormat.getCurrencyInstance(Locale.ITALY);
NumberFormat nf2 = NumberFormat.getCurrencyInstance(Locale.JAPAN);
System.out.println(nf1.format(123123) + " = " + nf2.format(123123 * 115.32));

Muy bueno! Ahora, una consulta... Si además de agregar el formato local, quiero especificar la cantidad de dígitos... Cómo podría hacer?

Me refiero, a cantidad de dígitos decimales...
Saludos!

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <pre>. The supported tag styles are: <foo>, [foo].

Más información sobre opciones de formato

By submitting this form, you accept the Mollom privacy policy.