2013-08-08 9 views
22

Ich versuche,% des verwendeten Speicherplatzes in Windows zu berechnen, und totaldrive bezeichnet insgesamt Speicherplatz von c Laufwerk in Long und freedrive dostes freien Speicherplatz in Long.Teilen lange durch lange Renditen 0

long totaloccupied = totaldrive - freedrive; 

Hier Berechnung% des Verbrauches

Long Percentageused =(totaloccupied/totaldrive*100); 
System.out.println(Percentageused); 

Die Aussage Druck 0 zurück Kann jemand helfen, da ich nicht den gewünschten Wert

+6

Heh. Es war ein langer Tag, an dem ich den Fluss hinunter schwebte ... – cabbagery

+1

Warum benutzt du 'Long' statt' Long'? Sehen Sie sich auch die Java-Namenskonventionen für 'prozentual verwendet' an. – wchargin

Antwort

42

Sie teilen wahrscheinlich eine lange mit einer langen, die bezieht sich auf (lang/lang = lang) Operation, ein langes Ergebnis (in Ihrem Fall 0).

Sie können dasselbe erreichen, indem Sie beide Operanden der Division in einen Float-Typ umwandeln.

Long Percentageused = (long)((float)totaloccupied/totaldrive*100); 
1

, dass immer wird nach rechts ausgewertet werden links, die erste Ganzzahlige Division gibt 0 zurück (z. B. 8/10 ergibt 0). Entweder Werte in Floats umwandeln oder 100 * a/b. Floats geben Ihnen ein präziseres Ergebnis.

+0

'float' wird * nicht * ein genaueres Ergebnis geben, wenn die beteiligten Zahlen groß sind. – paddy

+0

Es wird, wenn Sie (float) (100 * a)/(float) b. Die beiden Seiten unterscheiden sich in einer relativ kleinen Größenordnung, in der die meisten Präzisionsverluste auftreten. –

+1

BTW, wer auch immer hier durchgekommen ist und jede Antwort hier gewählt hat, bitte hinterlassen Sie einen konstruktiven Kommentar. –

4

Sie machen Integer Division! Da totaloccupied kleiner ist als totaldrive, gibt die Teilung von beiden die Antwort 0.

double percentageUsed = 100.0 * totalOccupied/totalDrive; 

Beachten Sie, dass das Komma auf die 100 Zugabe sorgt sie als double behandelt wird: Sie sollten zuerst verdoppeln konvertieren.

+0

Wenn totalOccupied und totalDrive beide lang sind, führt eine Multiplikation mit 100.0 zu 0,0 –