Avatar billede bris Nybegynder
07. juni 2006 - 08:33 Der er 8 kommentarer

uddrage timer, minutter, seconder fra et stor tal

Hejsa

Jeg har et stort tal, som inderholder en summation i sekunder. (java long). Ud fra dette tal skal jeg bruger timer, minutter og sekunder. jeg prøvede først at gøre det sådan her:

long hours, minutes, seconds, temp;
        temp = summationTime/1000;
          hours = temp / 3600;
          temp = temp - (hours * 3600);
          minutes = temp / 60;
          temp = temp - (minutes * 60);
          seconds = temp;

Men det ser ud til, at jeg mister noget i mine divisioner, så tallene ikke bliver præcise. Nogle andre forslag, eller rettelser til mit forslag?
Avatar billede arne_v Ekspert
07. juni 2006 - 08:37 #1
der burde ikke vaere nogle problemer i det

da du dividerer med 1000 antager jeg at der er millisekunder

du kunne bruge % fremfor -* men det goer ikke nogen forskel
Avatar billede bris Nybegynder
07. juni 2006 - 08:54 #2
Nej, hov. Det er faktisk mig der har lavet en fejl der. Jeg har brugt et af mine tidligere eksempler, men tallet er faktisk i SEKUNDER.
Avatar billede bris Nybegynder
07. juni 2006 - 09:17 #3
Så bliver det jo sådan her:

hours = summationTime / 3600;
          temp = summationTime-(hours*3600);
          minutes = temp/60;
          seconds = temp-(60*minutes);
Avatar billede mrbonus Novice
07. juni 2006 - 09:36 #4
Problemet ligger i at du laver heltalsdivision. hvis du tager to heltal (tal uden kommaer) og dividere med hinanden rundes der automatiskt op, måden du kan gøre dette på er at gøre således

double hours = temp / 3600.0;

hvilket gør at du nu dividerer med et kommatal, husk at du også skal gemme det som et kommatal, ellers forsvinder dine decimaler også
Avatar billede mrbonus Novice
07. juni 2006 - 09:42 #5
hovsa, jeg læste vist lidt for hurtigt, glem det jeg skrev
Avatar billede jakoba Nybegynder
07. juni 2006 - 10:47 #6
Din metode er grundlæggende korrekt og burde virke.

En pernittenkommentar er at din division med 1000 ikke bør være en heltalsdivision, men istedet være en division
med afrunding. fx:

long hours, minutes, seconds, temp;

    temp = (summationTime+500)/1000;  // afrundet til nærmeste antal hele sekunder
   
    seconds = temp % 60;
    temp = temp / 60;          // her skal IKKE rundes
    minutes = temp % 60;
    hours = temp / 60;
Avatar billede bris Nybegynder
03. marts 2008 - 08:47 #7
Jeg synes jeg kan huske det her var din jakob :) svar?
Avatar billede jakoba Nybegynder
03. marts 2008 - 16:10 #8
ok.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester