Konvertieren von KB in MB, GB, TB dynamisch

7
%Vor%

Dies ist eine Methode, die die Größe in GB, MB, KB oder TB zurückgeben soll. Eingabewert ist in KB. zum Beispiel sollte Ergebnis für 1245 wie 1.21MB sein, aber was ich bekomme, ist 1.00MB.

    
pedja 24.11.2012, 09:15
quelle

9 Antworten

23

Sie führen integer division aus. Das Ergebnis der Division ist also auch integer . Und Bruchteil wird abgeschnitten.

%Vor%

Ändern Sie Ihre Aufteilung in floating point division : -

%Vor%

Auch Ihr Vergleich ist fehlerhaft. Sie sollten den Vergleich mit 1 durchführen.

%Vor%

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.

    
Rohit Jain 24.11.2012, 09:16
quelle
28

Eine modifizierte Version. Nur Anrufe formatieren einmal. Enthält "Bytes".

%Vor%     
bickster 13.12.2013 00:05
quelle
5

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.

    
NPE 24.11.2012 09:17
quelle
3

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

%Vor%     
PermGenError 24.11.2012 09:17
quelle
3

Ich liebe das:

%Vor%     
Sampisa 27.09.2017 14:32
quelle
2

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%     
Christian Esken 05.01.2017 14:06
quelle
0
%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)

    
Vishwajit R. Shinde 20.01.2015 13:13
quelle
0

Meine Basisversion (Sie können einige Konstanten definieren, anstatt den POW ständig zu berechnen):

%Vor%     
Buffalo 28.09.2016 08:37
quelle
0

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.).

%Vor%

Die obige Methode prüft einfach, ob der Wert Nullen als Dezimalziffern hat.

%Vor%     
X09 09.12.2016 18:23
quelle

Tags und Links