[Code] Erste Dezimalstelle auf 0 setzen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von bur, 28. November 2011 .

Schlagworte:
  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.
     
  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
     
  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.
     
  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.
     
  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.
     
  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.
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.