Versuchen, den Rollover einer 24-Stunden-Uhr von Hand zu emulieren (mit Mathe im Vergleich zu den Zeitspannen Klassen). Der inkrementierende Teil war leicht herauszufinden, wie man von 23:00 Uhr auf 0:00 Uhr und wieder zurück kommt, aber es in die andere Richtung zu bringen, erweist sich als wirklich verwirrend. Hier ist, was ich bisher:C#: Dekrementieren einer Uhr mit Modulo-Mathematik
static void IncrementMinute(int min, int incr)
{
int newMin = min + incr,
hourIncrement = newMin/60;
//increment or decrement the hour
if((double)newMin % 60 < 0 && (double)newMin % 60 > -1)
hourIncrement = -1;
Console.WriteLine("Hour increment is {0}: ", hourIncrement);
}
Das Problem, das im Ergebnis ist, wenn nach hinten los, wenn das das E-Modul zwischen den Zahlen ist, wird es nicht richtig verringern. Beispiel: Es ist 12:00 und Sie subtrahieren 61 Minuten, wir wissen, dass die Zeit 10:59 Uhr ist, da die Stunde 1 Stunde zurückgehen sollte, um von 12:00 Uhr auf 11:59 Uhr zu gehen, und dann wieder zurück, um von 11:00 Uhr zu gehen bis 10:59. Leider ist die Art und Weise, wie es berechnet wird: newMin% 60 in diesem Fall, nimmt nur die erste Stunde Rollback, aber da der zweite Rollback ist technisch -1.0166 als Rest, und da Mod nur eine ganze Zahl zurückgibt, seine Abrundung. Ich bin mir sicher, dass ich hier ein paar Grundkenntnisse vermisse, aber könnte mir jemand helfen?
EDIT: Ich habe dies eine Reihe von Möglichkeiten lang und kurz geschrieben. Einige sind näher als andere, aber ich weiß, das ist einfacher als es scheint. Ich weiß, dass dieser hier irgendwie "wtf was er macht" scheint, aber du solltest im Grunde sehen können was ich versuche zu tun. Das Inkrementieren einer Uhr und das Rollover von 23:59 Uhr auf 0:00 Uhr ist einfach. Rückwärts gehen hat sich als nicht so einfach erwiesen.
OK, hier ist die incrementMinute mit dem Rollover. Einfach. Aber versuche rückwärts zu gehen. Funktioniert nicht.
static void IncrementMinute(int min, int incr)
{
int newMin = min + incr,
hourIncrement = newMin/60;
min = newMin % 60;
Console.WriteLine("The new minute is {0} and the hour has incremented by {1}", min, hourIncrement);
}
erschweren Könnten Sie ein wenig mehr Details zu diesem Add, ein Anwendungsbeispiel und erwarteten Zustand der globalen Variablen im Besonderen? – steinar
Welche Werte haben 'min' und' incr'? – ChrisF
Ich glaube, ich habe diese Beispiele gegeben. Im Grunde, wie kann ich das Dekrement programmieren, um 12:00 - 0:61 = 10:59 zu haben und es auch für Inkremente arbeiten zu lassen. – Sinaesthetic