double number = 12345.6789; // you have this
int decimal = (int) number; // you have 12345
double fractional = number - decimal // you have 0.6789
Problem polega na tym, że część ułamkowa nie jest zapisywany w pamięci jako „0.6789”, ale może mieć pewne „przesunięcia”, że tak powiem. Na przykład 0.6789
może być przechowywany jako 0.67889999291293929991
.
Myślę, że głównym problemem tutaj nie jest coraz część ułamkowa, ale coraz część ułamkową z pewnym precyzją.
Jeśli chcesz uzyskać dokładne wartości przypisane go, może warto rozważyć to (chociaż, że nie jest to czysty roztwór):
String doubleAsText = "12345.6789";
double number = Double.parseDouble(doubleAsText);
int decimal = Integer.parseInt(doubleAsText.split("\.")[0]);
int fractional = Integer.parseInt(doubleAsText.split("\.")[1]);
Ale, jak powiedziałem, to jest nie najskuteczniejsze i najczystsze rozwiązanie.
Musisz zdecydować, czy szukasz części ułamkowej reprezentacji * * drukowanej lub jeśli jesteś gotów zaakceptować pozorną różnice w dokładności w rzeczywistej reprezentacji binarnej. – seh
@seh istnieje różnica, że ułamek powinien zawierać tylko cyfry bez przebicia. – Dreamer
Jedynym sposobem jest ustawienie liczby miejsc dziesiętnych do pracy z ... Przykładem z 2 miejscami dziesiętnymi: 0,01 będzie 1, a 0.10 będzie 10. Spójrz na moją odpowiedź. – marcolopes