Laden...

[gelöst] Auf- / Abrunden auf volle 40

Erstellt von SlyFox vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.278 Views
S
SlyFox Themenstarter:in
231 Beiträge seit 2007
vor 13 Jahren
[gelöst] Auf- / Abrunden auf volle 40

Hallo,

ich möchte Quadrate auf den Bildschirm zeichnen, wenn ein Benutzer mit der Maus in ein Fenster klickt. Die Quadrate sollen 40 x 40 Pixel groß sein.

Damit die Quadrate ordentlich in Reihen und Spalten stehen, habe ich folgende Formel geschrieben, um sie korrekt anzuordnen:

			if (x % 40 < 20)
			{
				x -= x % 40;
			}
			else
			{
				x += (40 - x % 40);
			}

Ich bin mir sicher, dass es auch eine Universalformel ohne If gibt. Kann mir da jemand auf die Sprünge helfen?

Vielen Dank

Christoph

S
489 Beiträge seit 2007
vor 13 Jahren

Math.Round(10.8); -> 11
Math.Abs(10.8); -> 10

S
SlyFox Themenstarter:in
231 Beiträge seit 2007
vor 13 Jahren

Hallo SeboStone,

Round und Abs kenne ich.

Round rundet kaufmännisch, Abs rundet ab.

Aber ich muss ja auf 0, 40, 80, 120, ... runden.

Christoph

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

geht auch mit

(x / 40) * 40

wenn x kein int ist, musst Du ihn noch casten, damit das Ergebnis der Division auch int wird.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

U
282 Beiträge seit 2008
vor 13 Jahren

Ungetestet:


const int m = 40;
return ((n + m/2)/m)*m;

Edit: Fipptehler in formel korrigiert.

S
SlyFox Themenstarter:in
231 Beiträge seit 2007
vor 13 Jahren

Hallo MarsStein,

vielen Dank für deinen Denkanstoß.

Folgendermaßen geht es:

(x + 20) / 40 * 40

Christoph

S
489 Beiträge seit 2007
vor 13 Jahren

Aber ich muss ja auf 0, 40, 80, 120, ... runden.

Stimmt, hab Deinen Post nicht vollständig gelesen. 😉

U
1.688 Beiträge seit 2007
vor 13 Jahren

Round und Abs kenne ich.

Round rundet kaufmännisch, Abs rundet ab.

Seit wann denn das?

1.002 Beiträge seit 2007
vor 13 Jahren

Hallo SlyFox,

Round rundet kaufmännisch, Abs rundet ab.

das stimmt so nicht. Math.Round() kann auch mathematisch runden, wenn MidpointRounding.ToEven gesetzt ist. Math.Abs() rundet gar nicht, sondern gibt den Betrag der übergebenen Zahl zurück, wobei "Abs" für "Absolutwert" steht.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg