DWORD / DWORD liefert IMMER 0



  • hey leutz...

    folgendes problem: ich will eine prozentzahl erhalten.
    dafür hab ich den grundwert und den anderen jeweils als DWORD

    DWORD dwGrundwert;
    DWORD dwWert;
    
    DWORD GetPct ()
    {
     return (dwWert/ dwGrundwert) * 100;
    }
    

    nun liefert die rechnung

    (dwWert/ dwGrundwert) * 100

    immer 0. hab ich da was vercheckt???
    wird da nicht automatisch gerundet odda so???

    mit ceil () funktioniert es auch nich...



  • Das Problem hierbei ist, dass C++ immer den größten Datentyp wählt, wenn er mit 2 Variablen rechnet. (DWORD & DWORD da nimmt er DWORD)
    DWORD ist ein Ganzahltyp. Also wird immer nach unten gerundet, was in deinem Fall die 0 ist, bevor mit 100 multipliziert wird.

    Umgehen kannst du das z.B. so:

    return dwWert / (dwGrundwert * 100f);
    

    Das f hat aus der 100 ein Float gemacht mit dem Wert 100 und jetzt wird erst DWORD mit Float multipliziert und dann ein DWORD durch die resultierenden Flaot dividiert.



  • Da das Ergebnis aber wieder ein DWORD ist, reicht es hier, mit 100 (Ganzzahl) zu multiplizieren. Hauptsache, die Multiplikation wird vor der Divison ausgeführt.



  • naja, dann uss ich die rechnung wohl noch ma umstellen, denn
    bei

    dwWert / (dwGrundwert * 100f);

    kommt ja nich der prozentwert raus



  • aber bei 100*dwWert/dwGrundwert 🙂



  • wär mein nächster post gewesen


Anmelden zum Antworten