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 DWORDDWORD 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
beidwWert / (dwGrundwert * 100f);
kommt ja nich der prozentwert raus
-
aber bei 100*dwWert/dwGrundwert
-
wär mein nächster post gewesen