Olá galera!
Tenho uma dúvida… tenho um “double” com um valor quebrado! Gostaria de obter somente a parte fracionária deste.
Exemplo:
11688.015008
gostaria de guardar somente 0.015008!
Como faço?
Obrigado.
Olá galera!
Tenho uma dúvida… tenho um “double” com um valor quebrado! Gostaria de obter somente a parte fracionária deste.
Exemplo:
11688.015008
gostaria de guardar somente 0.015008!
Como faço?
Obrigado.
double d = 12.121210;
System.out.println(d);
d -= ((int)d);
System.out.printf("%.5f", d);
Ou também,
double d = 11688.015008;
Double doubleValue = d; // Para Java 5
double temp = doubleValue.intValue();
double fracao = doubleValue - temp;
Mais rigorosamente, use Math.floor() se o número for positivo e Math.ceil() se o número for negativo, em vez de (int). É que o número double pode ser bem maior que um int, provocando problemas. O correto seria:
public static double frac (double x) {
if (x >= 0.0)
return x - Math.floor(x);
else
return x - Math.ceil(x);
}
rodrigo.fai
Atente para a perda de precisão que pode ocorrer com as operações com double. Usando o seu próprio valor como exemplo ( 11688.015008 ), ele será convertido para 0.01500800000030722.
Não é perda de precisão e sim visualizar um dado com casas a mais que não deveriam estar sendo vistas.
Por exemplo,
11688.015008 é armazenado internamente como se fosse o valor 11688.015008000000307220034301280975341796875 (é o valor maís próximo que o computador consegue armazenar internamente em binário, com a quantidade de bits que existem em um double).
Se você subtrair 11688 desse valor, vai obter 0.015008000000307220034301280975341796875, que o Java imprime como 0.01500800000030722.
valew galera!!!
Consegui resolver meu problema…
Obrigado.
11688.015008 armazenado internamente como se fosse o valor 11688.01500800000030722003430128097534179687 soa como uma perda de precisão.