Laden...

5 Minuten Blöcke & Modulo innerhalb einer Stunde

Erstellt von stephan.opitz vor 2 Jahren Letzter Beitrag vor 2 Jahren 409 Views
S
stephan.opitz Themenstarter:in
42 Beiträge seit 2008
vor 2 Jahren
5 Minuten Blöcke & Modulo innerhalb einer Stunde

Hallo,

ich habe jetzt schon eine Weile probiert und finde es einfach nicht heraus.

Ich gebe eine Zeiteinheit an: 5 Minuten

Jetzt möchte ich, dass er bei x0-x4 abrundet auf 0 und von x5-x9 auf 5 abrundet. x kann entsprechend einer Stunde die Werte 0 bis 5 annehmen. x= 5 also :55 - :59 letzter Block der Stunde.

Wenn ich aktuelle Minute (Modulo %) 5 mache bekomme ich 5 Minuten Blöcke bei x0 und x5 Ergebnis 0 ansonsten die Reste.

Ab dann ist aber Schluss... Ich weiß nicht, wie ich es von einander separieren soll und dann auch noch bei den höheren x > 0 also bei 30 oder 35 Minuten.

VG S

4.938 Beiträge seit 2008
vor 2 Jahren

Du meinst


int roundedMinutes = 5 * (minutes / 5);

(also Division statt Modulo)?!

S
stephan.opitz Themenstarter:in
42 Beiträge seit 2008
vor 2 Jahren

eher so:
00 -> 00
01 -> 00
02 -> 00
03 -> 00
04 -> 00
05 -> 05
06 -> 05
07 -> 05
08 -> 05
09 -> 05
10 -> 00
11 -> 00
12 -> 00
13 -> 00
14 -> 00
15 -> 05
16 -> 05
17 -> 05
18 -> 05
19 -> 05
... -> ...

S
stephan.opitz Themenstarter:in
42 Beiträge seit 2008
vor 2 Jahren

Das funktioniert nicht. Das kommt immer nur 0 und 1 im Wechsel raus.

Das scheint zu klappen:


int roundedMinutes = 5 * Math.Floor((minutes % 10) / 5);

2.079 Beiträge seit 2012
vor 2 Jahren

Dann hast Du etwas anderes falsch gemacht, die Rechnung von Th69 funktioniert.


for (var i = 0; i < 100; i++)
{
    var j = 5 * ((i % 10) / 5);
    Console.WriteLine($"{i:00} => {j:00}");
}

S
stephan.opitz Themenstarter:in
42 Beiträge seit 2008
vor 2 Jahren

Ja das geht doch so.

& wie wäre es bei?

00 -> 00
01 -> 00
02 -> 00
03 -> 00
04 -> 00
05 -> 05
06 -> 05
07 -> 05
08 -> 05
09 -> 05
10 -> 10
11 -> 10
12 -> 10
13 -> 10
14 -> 10
15 -> 15
16 -> 15
17 -> 15
18 -> 15
19 -> 15
... -> ...

Ich komme mit den Zeiten nicht klar.

2.079 Beiträge seit 2012
vor 2 Jahren

(i / 5) * 5

S
stephan.opitz Themenstarter:in
42 Beiträge seit 2008
vor 2 Jahren

So funktioniert es:


normalized_minute = 10 * math.floor(minute / 10) + 5 * math.floor((minute % 10) / 5)

Danke für die Hilfe!

190 Beiträge seit 2012
vor 2 Jahren

Also das funktioniert bei mir:


for (int i = 0; i < 100; i++)
{
    int j = 5 * (i / 5);
    Console.WriteLine($"{i:00} => {j:00}");
}

und raus kommt das gleiche wie bei dir:
00 => 00
01 => 00
02 => 00
03 => 00
04 => 00
05 => 05
06 => 05
07 => 05
08 => 05
09 => 05
10 => 10
11 => 10
12 => 10
...
83 => 80
84 => 80
85 => 85
86 => 85
87 => 85
88 => 85
89 => 85
90 => 90
91 => 90
92 => 90
93 => 90
94 => 90
95 => 95
96 => 95
97 => 95
98 => 95
99 => 95

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

D
152 Beiträge seit 2013
vor 2 Jahren

Sollte nicht auch folgendes zum Ergebnis führen


var minute = 7; // nur z.B.

var gerundet = minute - (minute % 5); // 5 = 7 - (7 % 5)

2.079 Beiträge seit 2012
vor 2 Jahren

Joa - kann man drüber streiten, was besser ist. Ich finde Division intuitiver, aber naja.