Trabalhando com hora, minuto e segundo

9 respostas
Ziru

Pessoal, preciso muito da ajuda de vocês. Eu tenho uma formula no exel que passo algumas informações e ela me retorna um horario.
Há 3 informações que precisam ser passada pelo usuario

CV = Coeficiente de velocidade
NC = nivel de cartografia
D = distancia

=(4,5/(CV*(1+NC*10%))*D/6)/1440 - essa a formula no exel

Se eu disser que a distancia é 1500 e o coeficiente de velocidade é 1 a cartografia é 8
me retorna
um valor numérico de: 0,108506944

se eu configurar para hora fica em: 02:36:15

Alguém poderia me ajudar a fazer isso em Java? Ou não é possível?
de já agradeço a todos que se disponibilizarem em ajudar.

9 Respostas

ErickRAR

A classe TimeUnit poderá te ajudar. Dê uma pesquisada.

Ziru

Certo, então realmente e possivel fazer a mesma coisa do exel? Eu terei o mesmo resultado?

ErickRAR

Sim. Basta passar os coeficientes para um método que já tenha a formula(apenas uma das soluções). a classe TimeUnit irá te ajudar a formatar a hora para a saída ficar como você quer.

Ziru

Grato, vou estuda-la.

pmlm

Não conheço a class TimeUnit mas esas conversão é fácil de fazer.

O resultado que obténs (0,108506944 neste caso) é em dias. Só tens de passar para horas, minutos e segundos.

Se multiplicares por 24 (número de horas do dia), tens 2,604166656. Lá tens as tuas 2h.

Pegando no remanescente (0,604166656) tens de achar os minutos, que multiplicando por 60 (os minutos de 1h) dá 36,24999936. Já tens os 36 min

Pegando novamente no remanescente 0,24999936 é só achar os segundos, multiplicando novamente por 60 (os segundos de 1min) e que dá 14,9999616, o que arredondado para int dá os 15 seg

Ziru

Pequeno problema o exel me retorna um valo numerio e o Java me retorna outro

=(4,5/(1*(1+8*10%))*1500/6)/1440 - Formula em exel

double k =(4.5/(1*(1+8*10/100))*1500/6)/1440; É a mesma formula mas o valor é diferente.

O problema é que em (1+8*10/100) retorna 1.0 ao inves de 1.8, alguem sabe o porq disso? E como corrigir?

Ziru

Preciso que o valor retornado pelo java seja o mesmo que o exel me retora, caso contrario o meu sistema não terá consistência.

FernandoCartaxo

É que você está dividindo como inteiro e não como número fracionado.
Sempre que você divide com algum inteiro vai retornar um inteiro.
Basta passar teus números para double que resolve seu problema, pode fazer isso colocando um “d” no final do número:

(1d+8d*10d/100d)
Ziru

FernandoCartaxo:
É que você está dividindo como inteiro e não como número fracionado.
Sempre que você divide com algum inteiro vai retornar um inteiro.
Basta passar teus números para double que resolve seu problema, pode fazer isso colocando um “d” no final do número:

(1d+8d*10d/100d)

Valeu, agora ta faltando só conseguir converter para horas, minutos e segundos.

Criado 4 de outubro de 2012
Ultima resposta 4 de out. de 2012
Respostas 9
Participantes 4