double number = 12345.6789; // you have this
int decimal = (int) number; // you have 12345
double fractional = number - decimal // you have 0.6789
El problema aquí es que la parte fraccionaria no está escrita en la memoria como "0.6789", pero puede tener ciertas "compensaciones", por así decirlo. Por ejemplo, 0.6789
se puede almacenar como 0.67889999291293929991
.
Creo que su principal preocupación aquí no está recibiendo la parte fraccionaria, pero conseguir la parte fraccionaria con una cierta precisión .
Si desea obtener los valores exactos que le asignó a, es posible que desee considerar este (Altho, no es una solución limpia):
String doubleAsText = "12345.6789";
double number = Double.parseDouble(doubleAsText);
int decimal = Integer.parseInt(doubleAsText.split("\.")[0]);
int fractional = Integer.parseInt(doubleAsText.split("\.")[1]);
Pero, como ya he dicho, esto es no es la solución más eficiente y limpia.
Es necesario decidir si lo que buscas es la parte fraccionaria de la representación impresa * *, o si usted está dispuesto a aceptar la aparente disparidad en la precisión en la representación binaria real. – seh
@seh existe una diferencia en que el fraccionario solo debe contener dígitos sin pinchazo. – Dreamer
La única forma es establecer el número de decimales para trabajar con ... Ejemplo con 2 decimales: 0.01 sería 1 y 0.10 sería 10. Mira mi respuesta. – marcolopes