double number = 12345.6789; // you have this
int decimal = (int) number; // you have 12345
double fractional = number - decimal // you have 0.6789
Il problema qui è che la parte frazionaria non è scritto nella memoria come "0,6789", ma può avere alcuni "offset", per così dire. Ad esempio, 0.6789
può essere memorizzato come 0.67889999291293929991
.
penso che la vostra preoccupazione principale qui non è sempre la parte frazionaria, ma ottenere la parte frazionaria con una certa precisione .
Se vuoi per ottenere i valori esatti avete assegnato a, si può prendere in considerazione questo (sebbene sapessimo, non è una soluzione pulita):
String doubleAsText = "12345.6789";
double number = Double.parseDouble(doubleAsText);
int decimal = Integer.parseInt(doubleAsText.split("\.")[0]);
int fractional = Integer.parseInt(doubleAsText.split("\.")[1]);
Ma, come ho detto, questo è non la soluzione più efficiente e più pulita.
È necessario decidere se stai cercando per la parte frazionaria della rappresentazione * * stampata, o se siete disposti ad accettare la disparità apparente della precisione nella rappresentazione binaria effettiva. – seh
@seh c'è una differenza che il frazionario dovrebbe contenere solo cifre senza la puntura. – Dreamer
L'unico modo è impostare il numero di decimali con cui lavorare ... Esempio con 2 decimali: 0.01 sarebbe 1, e 0.10 sarebbe 10. Guarda la mia risposta. – marcolopes