Essas abordagens não funcionam porque double não trabalha com precisão. O objetivo dele é aqueles cálculos científicos em que a velocidade é mais importante do que o número exato.
Se você tiver sempre o mesmo número de casas decimais, o mais prático é simplesmente multiplicar por 10 elevado ao número de casas e aí trabalhar com números inteiros.
A classe usada para fazer cálculos com double é a BigDecimal, mas não tem nenhum método pronto para isso que você está querendo.
Outra idéia é passar o double para String e aí manipulá-lo como String mesmo.
Alguém tem mais alguma sugestão?
Com esse código você conseguira pegar a parte fracionada de uma forma mais simples:
public class Teste {
public static void main ( String args[] )
{
double val = 1.55;
int inteiro;
double resto;
inteiro = (int)(val);
resto = val - inteiro;
System.out.println( inteiro + " " + resto );
}
}
import java.text.DecimalFormat;
strictfp class MyClass { //strictfp segundo o que li evita truncamentos
public static void main (String args[]) {
DecimalFormat dezDigitos = new DecimalFormat("0.0000000000");
double d=5,890765;
int i=5;
double result=d-t;
System.out.println(dezDiditos.format(result);
}
}
Fiz um teste desse jeito e deu certo
System.out.println(“Informe o númeor”);
num = Double.parseDouble(entrada.readLine());
System.out.println("Parte inteira do Número : " + (int) (num));
System.out.println("Parte inteira do Número : " + ( num - (int)(num)));