Hallo!
Einen Gedanken in diese Richtung habe ich erst gar nicht weiterverfolgt, da ich gedacht habe, wenn dabi gerundet wird, KANN doch gar nicht die richtige Zeit rauskommen!
Tja, stimmt aber nicht. Wenn du _ganzzahlige_ Sekunden hast, dann kann man mit ganzzahligen Divisionsoperationen auch absolut korrekt Sekunden umrechnen in Minuten:Sekunden.
Grundlage ist folgende Gleichung:
Sekunden = Minuten*60+Sekundenrest
Logisch: Die Zahl der Minuten ist Sekunden/60. Da das eine Nachkommazahl ist, ist sie nicht sehr handlich. Aber die Zahl vor dem Komma gibt die Zahl der vollständigen Minuten an, die in der Sekundenanzahl steckt. Und diese Zahl ist immer korrekt.
Was die Zahl der Sekunden angeht: Die Modulo-Operation rechnet den "Rest" aus, der bei einer ganzzahligen Division übrigbleibt. Das sind genau die Sekunden, die bei der Fließkommadivision im Kommaanteil stecken.
Als Beispiel:
23 / 5 = x Rest y
Grundschulwissen wieder hervorholen:
Die 5 paßt in die 23 genau 4mal herein. Also 23 / 5 = 4 Rest y.
Da 5 * 4 = 20, bleibt ein Rest von 3, weil 23 - 20 = 3.
Folglich: 23 / 5 = 4 Rest 3.
23 MODULO 5 = 3 (eben dieser Rest).
Dieser Rest würde sich umwandeln in eine Nachkommastelle:
3 / 5 = 0,6 - folglich ist 23 / 5 = 4,6.
Bei den Sekunden klappt es genauso:
155 / 60 = 2 Rest 35 -> 2:35 Minuten.
Bei meiner Schleifenvariante ist es 100%ig!
Deine Schleife arbeitet genauso:
Ziehe solange 60 von der Sekundenzahl ab, wie die Sekundenzahl größer als 59 ist, und erhöhe dafür den Minutenzähler -> Sekunden / 60.
Was als Sekundenzahl kleiner 60 übrigbleibt, sind die Restsekunden -> Sekunden MODULO 60.
Die Schleifenversion dürfte aber rechenintensiver sein, aber ich glaub nicht, das man das merkt, oder?
Deine Version dauert länger, ist schwerer zu verstehen, hat längeren Programmtext und macht "nur" genau das gleiche, wie die Einzeilen-Kurzversion. Warum nicht effektiv programmieren und die Einzeilenkurzversion nehmen? :)
- Sven Rautenberg