miércoles, 13 de junio de 2012

Como redondear decimales en Java // How to round decimals with Java

Para redondear decimales en Java hacemos uso de la clase BigDecimal la por medio de su metodosetScale(int newScale, RoundingMode roundingMode) podemos indicar el modo de redondeo y cuantos decimales queremos.
Ejemplo de redondeo de Decimales en Java



import java.math.BigDecimal;
import java.math.RoundingMode;
/**
 *
 * @author www.javafrikitutorials.com
 */
public class RedondearDecimales {

    public static void main(String[] args) {
        //string de un numero decimal
        String decimal = "3.14159265358979323846";
        //paso el string a un BigDecimal
        BigDecimal bigDecimal = new BigDecimal(decimal);
        //con el metodo setScale(int newScale, RoundingMode roundingMode) del BigDecimal
        //establezco los parametros del redondeo, en este caso 4 el numero de decimales
        //RoundingMode.HALF_UP el modo de redondeo HALF_UP es de la mitad hacia arriba
        BigDecimal bigDecimalRedondeado = bigDecimal.setScale(4, RoundingMode.HALF_UP);
        System.out.println("Decimal redondeado: " + bigDecimalRedondeado);
    }
}


Ejemplos de RoundingMode

RoundingMode es un tipo Enum en Java y tiene los siguientes valores UP, DOWN, CEILING, FLOOR, HALF_DOWN, HALF_EVEN, HALF_UP, y UNNECESSARY. A continuacion se detallan cada uno de ellos.

1. RoundingMode.UP
Redondea cualquier decimal a su entero superior


BigDecimal positiveDecimal = new BigDecimal("2.5");
BigDecimal positiveRedondeado = positiveDecimal.setScale(0, RoundingMode.UP);
System.out.println("Decimal positivo: " + positiveDecimal);
System.out.println("Decimal redondeado: " + positiveRedondeado);


System.out.println("");


BigDecimal negativeDecimal = new BigDecimal("-2.5");
BigDecimal negativeRedondeado = negativeDecimal.setScale(0, RoundingMode.UP);
System.out.println("Decimal negativo: " + negativeDecimal);
System.out.println("Decimal redondeado: " + negativeRedondeado);


En este ejemplo hemos establecido el setScale a 0, lo cual quiere decir que no nos devilvera ningun valor decimal.





2. RoundingMode.DOWN

Redondea el decimal a 0. Este metodo no incrementa o decrementa el valor 



BigDecimal positiveDecimal = new BigDecimal("2.5");
BigDecimal positiveRedondeado = positiveDecimal.setScale(0, RoundingMode.DOWN);
System.out.println("Decimal positivo: " + positiveDecimal);
System.out.println("Decimal redondeado: " + positiveRedondeado);


System.out.println("");


BigDecimal negativeDecimal = new BigDecimal("-2.5");
BigDecimal negativeRedondeado = negativeDecimal.setScale(0, RoundingMode.DOWN);
System.out.println("Decimal negativo: " + negativeDecimal);
System.out.println("Decimal redondeado: " + negativeRedondeado);




3. RoundingMode.CEILING
Para un valor positivo actua igual que RoundingMode.UP y para un valor negativo actua igual que RoundingMode.DOWN





BigDecimal positiveDecimal = new BigDecimal("2.5");
BigDecimal positiveRedondeado = positiveDecimal.setScale(0, RoundingMode.CEILING);
System.out.println("Decimal positivo: " + positiveDecimal);
System.out.println("Decimal redondeado: " + positiveRedondeado);


System.out.println("");


BigDecimal negativeDecimal = new BigDecimal("-2.5");
BigDecimal negativeRedondeado = negativeDecimal.setScale(0, RoundingMode.CEILING);
System.out.println("Decimal negativo: " + negativeDecimal);
System.out.println("Decimal redondeado: " + negativeRedondeado);




4. RoundingMode.FLOOR
Para un valor positivo actua igual que RoundingMode.DOWN y para un valor negativo actua igual que RoundingMode.UP





BigDecimal positiveDecimal = new BigDecimal("2.5");
BigDecimal positiveRedondeado = positiveDecimal.setScale(0, RoundingMode.FLOOR);
System.out.println("Decimal positivo: " + positiveDecimal);
System.out.println("Decimal redondeado: " + positiveRedondeado);


System.out.println("");


BigDecimal negativeDecimal = new BigDecimal("-2.5");
BigDecimal negativeRedondeado = negativeDecimal.setScale(0, RoundingMode.FLOOR);
System.out.println("Decimal negativo: " + negativeDecimal);
System.out.println("Decimal redondeado: " + negativeRedondeado);




6. RoundingMode.HALF_DOWN
Redondea hacia arriba solo si el decimal es > a 0.5





BigDecimal positiveDecimal = new BigDecimal("2.5");
BigDecimal positiveRedondeado = positiveDecimal.setScale(0, RoundingMode.HALF_DOWN);
System.out.println("Decimal positivo: " + positiveDecimal);
System.out.println("Decimal redondeado: " + positiveRedondeado);


System.out.println("");


BigDecimal negativeDecimal = new BigDecimal("-2.5");
BigDecimal negativeRedondeado = negativeDecimal.setScale(0, RoundingMode.HALF_DOWN);
System.out.println("Decimal negativo: " + negativeDecimal);
System.out.println("Decimal redondeado: " + negativeRedondeado);



7. RoundingMode.HALF_EVEN
Redondea hacia arriba solo si su numero mas cercano a la izquierda es impar

BigDecimal positiveDecimal = new BigDecimal("1.5");
BigDecimal positiveRedondeado = positiveDecimal.setScale(0, RoundingMode.HALF_EVEN);
System.out.println("Decimal positivo: " + positiveDecimal);
System.out.println("Decimal redondeado: " + positiveRedondeado);


System.out.println("");


BigDecimal negativeDecimal = new BigDecimal("-1.5");
BigDecimal negativeRedondeado = negativeDecimal.setScale(0, RoundingMode.HALF_EVEN);
System.out.println("Decimal negativo: " + negativeDecimal);
System.out.println("Decimal redondeado: " + negativeRedondeado);




8. RoundingMode.UNNECESSARY
Este modo se utiliza solo para insistir que un valor no necesita redonde, esto solo ocurre cuando el valor no tiene decimales. Si se utiliza con un valor que si tiene decimales entonces lanza una excepcion aritmetica.

Original de: http://www.javafrikitutorials.com/2011/08/como-redondear-decimales-en-java.html

1 comentario: