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(); } } }
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í:
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!
Hola amigo tengo problemas con la rutina de validacion de numero de telefono de google me da error el getInstance(); no consigo que me lo acepte y lo coloca en rojo. Error can not find symbol getInstance()...........
Tengo cargadas todas estas librerias
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
import com.google.i18n.phonenumbers.Phonenumber;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.Phonemetadata;
import com.google.i18n.phonenumbers.AlternateFormatsCountryCodeSet;
import com.google.i18n.phonenumbers.*;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
public boolean isMobileNumberValid(String phoneNumber)
{
boolean isValid = false;
// Use the libphonenumber library to validate Number
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber swissNumberProto =null ;
try {
swissNumberProto = phoneUtil.parse(phoneNumber, "CH");
} catch (NumberParseException e) {
System.err.println("NumberParseException was thrown: " + e.toString());
}
if(phoneUtil.isValidNumber(swissNumberProto))
{
isValid = true;
}