setscale round multiply decimals java bigdecimal

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.


Yo probaría bd.remainder(BigDecimal.ONE) .

Utiliza el método remainder y la constante ONE .

BigDecimal bd = new BigDecimal( "23452.4523434" ); BigDecimal fractionalPart = bd.remainder( BigDecimal.ONE ); // Result: 0.4523434