Eclipse Indig: sekunden umrechnen

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Tritt der Rundungsfehler bei den 70% aus, oder bei dem Aufteilen in Stunden / Minuten / Sekunden?

int sec = ...
int min = sec / 60
sec = sec % 60
int hour = min / 60
min = min % 60

Das ist eigentlich die klassische Umrechnung von Sekunden in Sekunde/Minute/Stunde


servus1996 
Beitragsersteller
 29.05.2013, 20:23

tut mir leid, vielleicht habe ich mich hier falsch ausgedrückt, ich meinte eigentlich, das die zeit so angezeigt wird...zB. 2:34:47

wenn ich einfach durch 60 rechne komme ich zwar auf die zeit, aber mit kommastellen...

drasaa  29.05.2013, 20:28
@servus1996

Nein, Integer haben keine Kommastellen.

Mein code berechnet Stunde, Minute und Sekunde, die Ausgabe hatte ich jetzt weggelassen.

Bitte stell deinen Code zur Verfügung, dann wird eventuell klarer was du willst.

servus1996 
Beitragsersteller
 29.05.2013, 20:37
@drasaa

Ok, du hattest recht:D Dein Code ist perfekt und es treten keine Rundungsfehler auf...

Wenn ich mir deinen im vergleich zu meinem anschaue...naja schau selbst^^

 float LZEchtD=(LZEcht);
    int LZEchtI = ((int)LZEcht);

    float LZStundenD = (LZEchtD)/(60*60);
    int LZStundenI = (LZEchtI)/(60*60);

    float LZMinZwischenD = LZStundenD - LZStundenI;

    float LZMinD = LZMinZwischenD*60;
    int LZMinI = (int)LZMinD;

    float LZSekZwischen = LZMinD - LZMinI;
    float LZSekD = LZSekZwischen*60;
    int LZSekI = (int)LZSekD;
drasaa  29.05.2013, 20:49
@servus1996

Okay, ich hab das Problem erkannt. Einfach gesagt: Double und Float sind Teufelszeug, erwarte nie das richtige Ergebnis.

Mathematisch ist deine Lösung absolut korrekt. LZSekD müssten genau die Sekunden sein. Allerdings tritt bei der Fließkommaarithmetik immer eine gewisse Ungenauigkeit auf. Bei der 7. bis 8. Nachkommastelle hast du bereits Rundungsfehler, die sich natürlich Fortsetzen und immer schlimmer werden.

Wenn jetzt also LZSekD also nicht 5 sondern 4,999999997 ist (nur als Beispiel) dann rundet "(int)LZSekD" immer ab. Es wird also 4.

Daher mein Rat: Bevor du Double oder Float verwendest, google nach einer Lösung. Für dieses Problem hättest du den Code wie ich ihn dir geschrieben habe gefunden. Und wenn du doch mal Double verwenden musst, schau dir in der Dokumentation unter "Math" die Methoden zum Runden an.

servus1996 
Beitragsersteller
 29.05.2013, 20:59
@drasaa

Danke für die Antwort, so etwas dachte ich mir schon...war aber die einzige möglichkeit die mir auf nach langen überlegen eingefallen ist;)

Hätte noch eine letzte Frage wo du schon mal da bist:

Hab das programm mit einem eingabefeld, einem ausgabefeld und einem button gemacht (window builder) Kanst du mir sagen wie ich für dieses programm ein Icon einsetzten kann? (also das da nicht die kaffeetasse ist sondern ein von mir eingestelltes bild)

Danke

drasaa  29.05.2013, 21:10
@servus1996

Ich arbeite nicht mit dem Window Builder, daher keine Ahnung.