lunes, 29 de febrero de 2016

BigDecimal

Probar esto a ver

double num=3.125;

//esta forma es para pasar a bigdecimal
BigDecimal b = new BigDecimal(num);
b = b.setScale(2, RoundingMode.HALF_UP);
System.out.println(b);
// b.doubleValue(); devuelve a su estado anterior

//esta forma es para el print
DecimalFormat c=new DecimalFormat(“##.00?);
System.out.println( c.format(num));

Mis Otros Blogger
http://manualesimportantesdeempresarios.blogspot.com/
http://trabajarporinternetenvenezuela.blogspot.com/
http://lomejordelaprogramacionjavayotros.blogspot.com/
http://fundacionformandoconcienciayvalores.blogspot.com/

jueves, 25 de febrero de 2016

Decimal Format (JAVA)

DecimalFormat
La clase DecimalFormat de java nos permite mostrar los números en pantalla con el formato que queramos, es decir, con cuántos decimales, si queremos punto o coma para los decimales, etc. DecimalFormat también es útil para presentar un número en un JTextField o recoger el texto del JTextField y reconstruir el número.
Un uso simple de DecimalFormat puede ser este
import java.text.DecimalFormat;
...
DecimalFormat formateador = new DecimalFormat("####.####");

// Esto sale en pantalla con cuatro decimales, es decir, 3,4324
System.out.println (formateador.format (3.43242383));
En la API de DecimalFormat podemos ver todos los posibles caracteres que admite la máscara.
Si usamos ceros en vez de #, los huecos se rellenarán con ceros.
import java.text.DecimalFormat;
...
DecimalFormat formateador = new DecimalFormat("0000.0000");

// Esto sale en pantalla con cuatro cifras enteras
// y cuatro decimales, es decir, 0003,4300
System.out.println (formateador.format (3.43));
Porcentajes

Una característica curiosa, es que si usamos en la máscara el signo de porcentaje %, el número se multiplicará automáticamente por 100 al presentarlo en pantalla.

 DecimalFormat formateador = new DecimalFormat("###.##%");

 // Esto saca en pantalla 34,44%
 System.out.println (formateador.format(0.3444));
DecimalFormatSymbols

La clase DecimalFormat usa por defecto el formato para el lenguaje que tengamos instalado en el ordenador. Es decir, si nuestro sistema operativo está en español, se usará la coma para los decimales y el punto para los separadores de miles. Si estamos en inglés, se usará el punto decimal.
Una opción para cambiar esto, es crear una clase DecimalFormatSymbols, que vendrá rellena con lo del idioma por defecto, y cambiar en ella el símbolo que nos interese. Por ejemplo, si estamos en español y queremos usar el punto decimal en vez de la coma, podemos hacer esto
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
...
DecimalFormatSymbols simbolos = new DecimalFormatSymbols();
simbolos.setDecimalSeparator('.');
DecimalFormat formateador = new DecimalFormat("####.####",simbolos);

// Esto sale en pantalla con punto decimal, es decir, 3.4324,
System.out.println (formateador.format (3.43242383));

En la API de DecimalFormatSymbols puedes ver qué más símbolos se pueden cambiar.
También es posible coger el DecimalFormaSymbols de alguna localización concreta que nos interese y modificar o no lo que haga falta. Por ejemplo, si nos interesa que la coma decimal sea un punto en vez de una coma, podríamos coger el DecimalFormatSymbols de Inglaterra
DecimalFormatSymbols simbolos = DecimalFormatSymbols.getInstance(Locale.ENGLISH);
DecimalFormat formateador = new DecimalFormat("####.####",simbolos);
Aunque, ojo, esto cambia todo, también cosas como la moneda (libras esterlinas o euros), etc.
Reconstruir el número

Si suponemos que un usuario escribe en un JTextField un número, podemos leerlo y reconstruirlo con DecimalFormat
 JTextField textField = new JTextField();
 ...
 DecimalFormat formateador = new DecimalFormat("####.####");
 String texto = textField.getText();
 try
 {
    // parse() lanza una ParseException en caso de fallo que hay
    // que capturar.
    Number numero = formateador.parse(texto);
    double valor = numero.doubleValue();
    // Estas dos líneas se puede abreviar con
    // double valor = formateador.parse(texto).doubleValue();
 }
 catch (ParseException e)
 {
    // Error. El usuario ha escrito algo que no se puede convertir
    // a número.
 }

Mis Otros Blogger
http://manualesimportantesdeempresarios.blogspot.com/
http://trabajarporinternetenvenezuela.blogspot.com/
http://lomejordelaprogramacionjavayotros.blogspot.com/
http://fundacionformandoconcienciayvalores.blogspot.com/