Saltar al contenido

Bigdecimal.divide y redondeo de Java

Solución:

Como se especifica en javadoc, un BigDecimal está definido por un valor entero y un escala.

Por lo tanto, el valor del número representado por BigDecimal es (unscaledValue × 10 ^ (- scale)).

Entonces BigDecimal("1761e+5") tiene escala -5 y BigDecimal(176100000) tiene escala 0.

La división de los dos BigDecimal se realiza utilizando las escalas -5 y 0 respectivamente porque las escalas no se especifican al dividir. los divide La documentación explica por qué los resultados son diferentes.

divide

public BigDecimal divide(BigDecimal divisor)

Devuelve un BigDecimal cuyo valor es (this / divisor), y cuya escala preferida es (this.scale() - divisor.scale()); si el cociente exacto no se puede representar (porque tiene una expansión decimal no terminante) un ArithmeticException es aventado.

Parámetros:

divisor – valor por el que se dividirá este BigDecimal.

Devoluciones:

this / divisor

Lanza:

ArithmeticException – si el cociente exacto no tiene una expansión decimal final

Ya que:

1,5

Si especifica una escala al dividir, p. Ej. dividendo.divide(BigDecimal.valueOf(1000), 0, RoundingMode.HALF_UP) obtendrá el mismo resultado.

Las expresiones new BigDecimal("176100000") y new BigDecimal("1761e+5") están no es igual. BigDecimal realiza un seguimiento del valor y la precisión.

BigDecimal("176100000") tiene 9 dígitos de precisión y se representa internamente como el BigInteger("176100000"), multiplicado por 1. BigDecimal("1761e+5") tiene 4 dígitos de precisión y se representa internamente como el BigInteger("1761"), multiplicado por 100000.

Cuando divides un BigDecimal por un valor, el resultado respeta los dígitos de precisión, lo que da como resultado diferentes salidas para valores aparentemente iguales.

para su división con BigDecimal.

dividendo.divide(divisor,2,RoundingMode.CEILING)//00.00 nothing for up and nothing for down

en esta operación tienen una precisión de dos decimales.

¡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 *