2012-04-30 29 views
7

¿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

+2

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'. –

+1

@ AaronDigulla Creo que te refieres a un nuevo BigDecimal ("1548.5649") porque no hay un método BigDecimal.valueOf (String). –

Respuesta

10

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 
6

Trate BigDecimal.remainder:

BigDecimal d = BigDecimal.valueOf(1548.5649); 
BigDecimal fraction = d.remainder(BigDecimal.ONE); 
System.out.println(fraction); 
// Outputs 0.5649 
+0

se muestra: 1548.564900000000079671735875308513641357421875 – Mehdi

+1

Muestra '0.5649' para mí. –

+0

Sí, es verdad :) Gracias;) – Mehdi

4

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.

+0

Es trabajo ... gracias :) – Mehdi

-1

tratan de utilizar d.doubleValue() para obtener el valor doble

+2

devuelve el mismo número: 1548.5649 – Mehdi

0

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); 
+0

Esto funciona solo para una configuración regional que utiliza. como el separador decimal. Pero hay Locales que están usando,. – BetaRide

+0

@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. –

1

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

Cuestiones relacionadas