Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[gelöst] Auf- / Abrunden auf volle 40
SlyFox
myCSharp.de - Member



Dabei seit:
Beiträge: 234
Herkunft: Köln

Themenstarter:

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

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von SlyFox am .
private Nachricht | Beiträge des Benutzers
SeboStone
myCSharp.de - Member



Dabei seit:
Beiträge: 495

beantworten | zitieren | melden

Math.Round(10.8); -> 11
Math.Abs(10.8); -> 10
private Nachricht | Beiträge des Benutzers
SlyFox
myCSharp.de - Member



Dabei seit:
Beiträge: 234
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Uwe81
myCSharp.de - Member



Dabei seit:
Beiträge: 285
Herkunft: Ludwigshafen

beantworten | zitieren | melden

Ungetestet:


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

Edit: Fipptehler in formel korrigiert.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Uwe81 am .
private Nachricht | Beiträge des Benutzers
SlyFox
myCSharp.de - Member



Dabei seit:
Beiträge: 234
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

Hallo MarsStein,

vielen Dank für deinen Denkanstoß.

Folgendermaßen geht es:

(x + 20) / 40 * 40

Christoph
private Nachricht | Beiträge des Benutzers
SeboStone
myCSharp.de - Member



Dabei seit:
Beiträge: 495

beantworten | zitieren | melden

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

Stimmt, hab Deinen Post nicht vollständig gelesen. ;-)
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1770

beantworten | zitieren | melden

Zitat von SlyFox
Round und Abs kenne ich.

Round rundet kaufmännisch, Abs rundet ab.

Seit wann denn das?
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo SlyFox,
Zitat von 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
private Nachricht | Beiträge des Benutzers