¿Cómo extraer un número después del punto decimal con BigDecimal?Extraer número decimal en BigDecimal
BigDecimal d = BigDecimal.valueOf (1548.5649);
resultado: extracto solamente: 5649
¿Cómo extraer un número después del punto decimal con BigDecimal?Extraer número decimal en BigDecimal
BigDecimal d = BigDecimal.valueOf (1548.5649);
resultado: extracto solamente: 5649
Proveedores:
BigDecimal d = BigDecimal.valueOf(1548.5649);
BigDecimal result = d.subtract(d.setScale(0, RoundingMode.FLOOR)).movePointRight(d.scale());
System.out.println(result);
impresiones:
5649
Trate BigDecimal.remainder:
BigDecimal d = BigDecimal.valueOf(1548.5649);
BigDecimal fraction = d.remainder(BigDecimal.ONE);
System.out.println(fraction);
// Outputs 0.5649
Esto debe hacer el truco:
d.subtract(d.setScale(0, RoundingMode.FLOOR));
setScale()
redondea el número de cifras decimales cero, ya pesar de su nombre, no muta el valor de d
.
Es trabajo ... gracias :) – Mehdi
tratan de utilizar d.doubleValue()
para obtener el valor doble
devuelve el mismo número: 1548.5649 – Mehdi
Usted no le dice qué tipo usted quiere como resultado. La forma más sencilla es probablemente para transformar el BigDecimal en una cadena, y tomar una subcadena:
String s = d.toPlainString();
int i = s.indexOf('.');
if (i < 0) {
return "";
}
return s.substring(i + 1);
Esto funciona solo para una configuración regional que utiliza. como el separador decimal. Pero hay Locales que están usando,. – BetaRide
@BetaRide: lo sé, soy de habla francesa, y la coma se usa aquí. Pero BigDecimal.toPlainString() no tiene en cuenta la configuración regional. Utiliza el punto como separador decimal sea cual sea la configuración regional. –
Si el valor es negativo, usando d.subtract(d.setScale(0, RoundingMode.FLOOR))
devolverá un decimal incorrecto.
Utilice esta:
BigInteger decimal =
d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();
Devuelve 5649
para 1548.5649
o -1548.5649
Nota: Se debe utilizar 'BigDecimal.valueOf ("1548.5649");' en lugar debido a la conversión entre 'double' y 'BigDecimal' puede causar efectos secundarios extraños. Si necesita precisión, evite 'double' y' float'. –
@ AaronDigulla Creo que te refieres a un nuevo BigDecimal ("1548.5649") porque no hay un método BigDecimal.valueOf (String). –