#1 28. November 2011 Erste Dezimalstelle auf 0 setzen Ich habe eine Variable die ab und zu erhöht wird. Überschreitet der Wert 9 soll er wieder bei 0 anfangen. Also wenn var = 7 und ich addiere 5 soll sie auf 2 stehen, nicht auf 12. Das könnte man natürlich per IF machen, aber ich überlege ob man das auch per Maske oder ähnlichem hinkriegt? Bei Binary kann man per AND ja einfach bestimmte Bits löschen. Kann man irgendwie auch bei einer Dezimalzahl die erste Stelle auf Null setzen? Also so dass 8 -> 8, 3 -> 3 aber 11 -> 1, 12 -> 2 usw. wird. Oder vielleicht kann man es auch mathematisch lösen, aber da fiel mir auch nichts ein. + Multi-Zitat Zitieren
#2 28. November 2011 AW: Erste Dezimalstelle auf 0 setzen hi, da fällt mir auf die schnelle der modulo-operator ein. also die restdivision. da gibst du einfach die zahl an, ab der es wieder mit 0 beginnen soll und voila. Natürlich gilt das nun aber für alle Vielfache dieser Zahl, sowas eignet sich ganz gut für Zählervariablen, die sich nur in einem gewissen Zahlenbereich aufhalten sollen. bsp: (5+7)%10 = 2 (10+15)%10 = 5 Performanter ist es aber, wenn du: Code: while(x > 9){ x -= 9; } machst, addition/subtraktion is deutlich günstiger als division und multiplikation. mfg deepercut + Multi-Zitat Zitieren
#3 29. November 2011 AW: Erste Dezimalstelle auf 0 setzen Stimmt, eigentlich simpel mit dem Modulo. Irgendie hatte ich auch was im Hinterkopf dass es da eine Methode gab. Die while-Schleife ist auch eine gute Idee, wobei man einen Modulo-Operator doch auch so implementieren kann, oder? Division ist da ja eigentlich nicht erforderlich. Ich weiß nicht wie verschiedene Sprachen Modulo umsetzen, aber im Prinzip sollte das genauso aussehen würde ich sagen. + Multi-Zitat Zitieren
#4 29. November 2011 AW: Erste Dezimalstelle auf 0 setzen Dafür ist modulo sicherlich die eleganteste Lösung und mir fällt spontan keine Sprache ein, die Modulo nicht unterstützt. + Multi-Zitat Zitieren
#5 29. November 2011 AW: Erste Dezimalstelle auf 0 setzen Die While-Schleife ist im Allgemeinen eine ziemlich schlechte Idee. Nimm einfach den Modulo-Operator deiner Sprache und die richtigen Datentypen (signed und unsigned Modulo sind unterschiedlich), der Rest wird vom Compiler übernommen. Die sind ziemlich gut darin, sowas zu optimieren. Eigene Konstrukte machen erst Sinn, wenn... a) die Operation die Performance limitiert und/oder b) man für eingeschränkte Plattformen programmiert, die z.B. keine Hardwaredivision beherrschen. + Multi-Zitat Zitieren
#6 30. November 2011 AW: Erste Dezimalstelle auf 0 setzen Ein Problem tauchte auf, ich wollte die Variable jetzt auch erniedrigen und nach 0 soll dann wieder 9 kommen (also -2 -> 8). Hab das kurz mit Google gecheckt und das schien mit Modulo ebenfalls zu funktionieren. In Java dann allerdings nicht mehr... Hier ist -2 mod 10 = -2. Der Grund ist wohl dass die meisten Programmiersprachen symmetrischen Modulo benutzen (-2 / 10 = 0 * (-10) Rest -2) und Google scheint den mathematischen zu nehmen (-2 / 10 = (-1)*(-10) Rest 8). Ich habe allerdings eine Methode gefunden mit der man aus dem symmetrischen Modulo den mathematischen macht: ( a % b + b) % b Falls irgendwann noch jemand auf das Problem stößt. + Multi-Zitat Zitieren