Saltar al contenido

Redondeo de valores Bigdecimal con 2 lugares decimales

Esta es la solución más completa que te podemos brindar, pero primero obsérvala pausadamente y analiza si es compatible a tu trabajo.

Solución:

Yo creo que el RoundingMode lo que buscas es ROUND_HALF_EVEN. Del javadoc:

Modo de redondeo para redondear hacia el “vecino más cercano” a menos que ambos vecinos sean equidistantes, en cuyo caso, redondear hacia el vecino par. Se comporta como ROUND_HALF_UP si el dígito a la izquierda de la fracción descartada es impar; se comporta como ROUND_HALF_DOWN si es par. Tenga en cuenta que este es el modo de redondeo que minimiza el error acumulativo cuando se aplica repetidamente sobre una secuencia de cálculos.

Aquí hay un caso de prueba rápida:

BigDecimal a = new BigDecimal("10.12345");
BigDecimal b = new BigDecimal("10.12556");

a = a.setScale(2, BigDecimal.ROUND_HALF_EVEN);
b = b.setScale(2, BigDecimal.ROUND_HALF_EVEN);

System.out.println(a);
System.out.println(b);

Imprime correctamente:

10.12
10.13

ACTUALIZAR:

setScale(int, int) no se ha recomendado desde Java 1.5, cuando se introdujeron las enumeraciones por primera vez, y finalmente quedó en desuso en Java 9. Ahora debe usar setScale(int, RoundingMode) p.ej:

setScale(2, RoundingMode.HALF_EVEN)

Agregar 0.001 primero al número y luego llamar setScale(2, RoundingMode.ROUND_HALF_UP)

Ejemplo de código:

public static void main(String[] args) 
    BigDecimal a = new BigDecimal("10.12445").add(new BigDecimal("0.001"));
    BigDecimal b = a.setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println(b);

Puedes llamar setScale(newScale, roundingMode) método tres veces cambiando el valor newScale de 4 a 3 a 2 como

primer caso

    BigDecimal a = new BigDecimal("10.12345");

    a = a.setScale(4, BigDecimal.ROUND_HALF_UP); 
    System.out.println("" + a); //10.1235
    a = a.setScale(3, BigDecimal.ROUND_HALF_UP); 
    System.out.println("" + a); //10.124
    a = a.setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println("" + a); //10.12

segundo caso

    BigDecimal a = new BigDecimal("10.12556");

    a = a.setScale(4, BigDecimal.ROUND_HALF_UP); 
    System.out.println("" + a); //10.1256
    a = a.setScale(3, BigDecimal.ROUND_HALF_UP); 
    System.out.println("" + a); //10.126
    a = a.setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println("" + a); //10.13

Si para ti ha sido provechoso nuestro post, nos gustaría que lo compartas con otros seniors y nos ayudes a difundir nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *