round - Java, extrae solo la parte fraccional de un BigDecimal?
java bigdecimal round 2 decimals (4)
En Java, estoy trabajando con la clase BigDecimal
y parte de mi código requiere que extraiga la parte fraccional de ella. BigDecimal
no parece tener ningún método incorporado para ayudarme a obtener el número después del punto decimal de un BigDecimal
.
Por ejemplo:
BigDecimal bd = new BigDecimal("23452.4523434");
Quiero extraer el 4523434
del número representado arriba. ¿Cuál es la mejor manera de hacerlo?
Aquí hay una alternativa al uso del método remainder()
:
BigDecimal bd = new BigDecimal("23452.4523434");
BigDecimal fracBd = bd.subtract(new BigDecimal(bd.toBigInteger()));
Además, puede probar el método abs () para asegurarse de que la parte de la fracción sea positiva:
BigDecimal fracBd = bd.subtract(new BigDecimal(bd.toBigInteger())).abs();
Este retorno "4523434", incluso si establece el número en negativo "-23452.4523434".
BigDecimal d = BigDecimal.valueOf(23452.4523434);
BigInteger decimal = d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();
Si el valor es negativo, usar bd.subtract()
devolverá un decimal incorrecto.
Usa esto :
BigInteger decimal =
bd.remainder(BigDecimal.ONE).movePointRight(bd.scale()).abs().toBigInteger();
Devuelve 4523434
para 23452.4523434
o -23452.4523434
Además, si no desea ceros adicionales a la derecha de la parte fraccionaria, use:
bd = bd.stripTrailingZeros();
antes del código anterior.