C# Keine Division möglich?

SubNatural

Commander
Registriert
Jan. 2009
Beiträge
2.907
Hallo,

also ich stehe gerade so dermaßen auf dem Schlauch oder es gibt einen großen Fehler.
Ich habe folgenden Code:

Code:
private string GetRAMUsage()
        {
            
            int MaxRAM = 3000;
            int FreeRAM = Convert.ToInt32(RAMCounter.NextValue().ToString());
            int RAMpercent = FreeRAM/MaxRAM;
            return FreeRAM+" "+(100-RAMpercent)+"%";
        }

Logischerweise sollte RAMpercent den Wert des Quotienten beinhalten, es ist aber immer 0.
Kann mir jemand erklären wieso? Alle andern Operatoren(+,-,*) funktionieren nur dieser nicht.

Danke
Daniel
 
Hast du schon geprüft ob der Convert richtig lief?

Edit:
Ach ja, mach aus RAMPercend vllt mal nen Double oder Float
 
Hi,

welchen Wert hat denn FreeRAM? Sowohl vor als auch nach dem Convert. Du teilst durch 3000... da müsste schon einiges im Zähler stehen, damit bei einer Integerdivision nicht "0" rauskommt :)

Hast du mal einen festen Wert getestet? Zum Beispiel FreeRAM = 10000 und MaxRAM = 3000? Was kommt dabei raus?

VG,
Mad
 
Du speicherst alles in ein Int, Int kann nunmal kein Komma darstellen..
also sind alle Zahlen kleiner eins null!
 
Division bei int-Datentypen werden im Ergebnis auch int, d.h. du bekommst nur den ganzzahligen Teil zurück.

Da dein Ergebnis ja immer bei 0,irgendwas liegt ist RAMpercent eben immer 0.

Benutz double oder float statt int, dann löppts
 
Hi,

erstmal wenn du die Prozent bekommen möchtest, dann noch mit Hundert Multiplizieren. Wenn du den Wert unbedingt als Integer brauchst dann versuche folgendes:
statt
Code:
int RAMpercent = FreeRAM/MaxRAM
Code:
int RAMpercent = Convert.ToInt32(Convert.ToDouble(FreeRAM)/Convert.ToDouble(MaxRAM) * 100)

Ich bin mir grad nicht sicher, ob Convert.ToDouble exisitert oder nur ToFloat. Beides müsste aber gehen :D

mfg
BassT
 
Danke mit Double funktioniert es natürlich :D

P.S.: Natürlich muss man noch mit 100 multiplizieren
 
Zurück
Oben