Sie führen integer division
aus. Das Ergebnis der Division ist also auch integer
. Und Bruchteil wird abgeschnitten.
Ändern Sie Ihre Aufteilung in floating point division
: -
Auch Ihr Vergleich ist fehlerhaft. Sie sollten den Vergleich mit 1
durchführen.
Idealerweise würde ich Ihren Vergleich ändern zu: -
%Vor%Sie müssen zuerst mit der höheren Einheit und dann mit der höheren Einheit vergleichen.
Das Problem besteht darin, dass Sie eine ganzzahlige Division verwenden. Ändern Sie Ihren Code in:
%Vor% In Ihrem ursprünglichen Code würde double m = size/1024
die Ganzzahl size
durch 1024
teilen, das Ergebnis auf eine Ganzzahl kürzen und erst dann in double
umwandeln. Deshalb ging der Bruchteil verloren.
Sie führen eine ganzzahlige Division durch,
, d. h. 31/15 ergibt 2, nicht 2.was auch immer
füge einfach die Zahl mit D
oder d
an, die es als Doppel bezeichnet und du wirst in Ordnung sein
Es ist nicht einfach, das richtig zu machen. Rohit Jain erwähnte die Integer-Operation. Auch das Runden kann ein Problem sein, da eine Rundung nicht immer wünschenswert ist. Ich würde empfehlen, für eine verfügbare Lösung wie in der triava Bibliothek zu gehen.
Er kann Zahlen mit beliebiger Genauigkeit in 3 verschiedenen Systemen (SI, IEC, JEDEC) und verschiedenen Ausgabeoptionen formatieren. Hier sind einige Codebeispiele aus den Triava- Unit-Tests :
%Vor%Druck genau Kilo, Mega-Werte (hier mit W = Watt):
%Vor%Sie können ein DecimalFormat übergeben, um die Ausgabe anzupassen:
%Vor%Für beliebige Operationen auf Kilo- oder Mega-Werten können Sie sie in Komponenten aufteilen:
%Vor%Fügen Sie einfach weitere Dateieinheiten hinzu (falls welche fehlen), und Sie sehen die Einheitengröße bis zu dieser Einheit (wenn Ihre Datei so viel Länge hat)
Die Antwort von bickster funktioniert ganz gut, aber das Problem ist, dass Ergebnisse wie 45.00 Bytes
und 12.00 KB
zurückgegeben werden. . Meiner Meinung nach sollten die letzten Dezimalziffern entfernt werden, wenn sie Nullen sind. Anstatt 45.00 Bytes
und 12.00 KB
erhalten Sie 45 B
und 12 KB
(beachten Sie, dass Bytes
in B
geändert wurde. Dies ist nur für die Einheitlichkeit, da wir KB, MB usw. und nicht Kilobyte haben. Megabyte usw.).
Die obige Methode prüft einfach, ob der Wert Nullen als Dezimalziffern hat.
%Vor%