Casas decimais

4 respostas
aquilante

Pessoal muito boa tarde,

Tenho a seguinte dúvida sobre casas decimais.

if (Double.valueOf(duracao/60000) >= Double.valueOf(tempoParada)) {

Nesse trecho de código eu divido duração, que é do tipo Long, por 60000 e depois converto pra double para poder pegar os valores depois do zero. O problema é que não ta pegando. Se o resultado da operação for, por exemplo:

duração/60000 = 35,3333

Só ta assumindo 35,0. Eu quero pegar 35,3, porque se não eu perco a precisão do meu relatório.

Alguém tem uma sugestão?

Vlwssssssssss!
:lol:

4 Respostas

alanbrasil1984

Po cara amigo eu aconselho vc usar BigDEcimal ao inves de double primitivo.

espero ter ajudado.

B

Ola,

Parece uma coisa boba né?! já apanhei bastante com isto… mas tente:

if (Double.valueOf(duracao/60000.0) >= Double.valueOf(tempoParada))
Colocando o .0 no denominador…

sergiotaborda

aquilante:
Pessoal muito boa tarde,

Tenho a seguinte dúvida sobre casas decimais.

if (Double.valueOf(duracao/60000) >= Double.valueOf(tempoParada)) {

Nesse trecho de código eu divido duração, que é do tipo Long, por 60000 e depois converto pra double para poder pegar os valores depois do zero. O problema é que não ta pegando. Se o resultado da operação for, por exemplo:

duração/60000 = 35,3333

Só ta assumindo 35,0. Eu quero pegar 35,3, porque se não eu perco a precisão do meu relatório.

Alguém tem uma sugestão?

O problema é que vc está assumindo que duracao/60000 é um numero com casas decimais.
Mas se fosse porquê seria necessária a conversão para double ?
A resposta é simples: duracao/60000 não é um double, é um long. O que vc quer é comparar doubles, então faça exactamente isso. Não invente…

O detalhe é como fazer com que a divisão resulte num doube. A JVM irá converter para double se um dos valores for double. Logo basta que 60000 seja um double par que dê certo. Isso é feito colocando um d depois do numero. Pode ser feito usando 60000.00 mas isso não significa a mesma coisa. ( aqui vc está dizendo que aqules dois zeros depois da virgula são significativos; e no caso, não são)

if (duracao/60000d >=tempoParada) {
aquilante

Valeu pessoal era isso mesmo!

Bom feriado a todos!

:lol:

Criado 17 de março de 2008
Ultima resposta 17 de mar. de 2008
Respostas 4
Participantes 4