Konvertieren von KB, MB, GB, TB, dynamisch
public String size(int size){
String hrSize = "";
int k = size;
double m = size/1024;
double g = size/1048576;
double t = size/1073741824;
DecimalFormat dec = new DecimalFormat("0.00");
if (k>0)
{
hrSize = dec.format(k).concat("KB");
}
if (m>0)
{
hrSize = dec.format(m).concat("MB");
}
if (g>0)
{
hrSize = dec.format(g).concat("GB");
}
if (t>0)
{
hrSize = dec.format(t).concat("TB");
}
return hrSize;
}
Dies ist eine Methode, die sollten zurückkehren, Größe in GB,MB, KB oder TB. Input-Wert ist in KB.
zum Beispiel Ergebnis für 1245 sollte wie 1.21 MB, aber was ich bekomme ist 1.00 MB.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durchführung
integer division
. So das Ergebnis der division ist auchinteger
. Und Nachkomma-Teil abgeschnitten.Ändern Sie Ihre division zu
floating point division
: -Auch, dein Vergleich ist fehlerhaft. Sie sollte den Vergleich mit
1
.Idealerweise würde ich ändern Ihren Vergleich an: -
Müssen Sie vergleichen mit dem höheren Einheit, die ersten, und verschieben Sie dann den unteren.
else if
statt nurif
fürm
,g
, undt
, da selbst eine kleine Datei sein könnte 0.00000000001 TB (die ist größer als null).1
, und Sie tun es mit0
. Ändern Sie alle, wenn zuk > 1
,g > 1
, ...if
Vergleich ein wenig.TB
, wenn nicht zu bewegen, umMB
, und so weiter.. zuKB
. Siehe die if-else-Vergleich habe ich gepostet. So, nicht alle Ihre Bedingungen überprüft werden.Einer modifizierten version. Nur Anrufe format einmal. Enthält "Bytes".
Ich Liebe dieses:
Das problem ist, dass Sie unter Verwendung der integer-division. Ändern Sie Ihren code ein:
In Ihrem ursprünglichen code
double m = size/1024
würde teilen die integersize
durch1024
, abschneiden des Ergebnisses auf einen ganzzahligen, und nur dann konvertieren, umdouble
. Dies ist der Grund, warum der gebrochene Teil war verloren.Durchführung integer-division,
d.h., 31/15 Folge 2, nicht 2.was
fügen Sie einfach die Anzahl mit
D
oderd
bezeichnet es als verdoppeln, und Sie werden in Ordnung seinNicht einfach um das richtig zu stellen. Rohit Jain erwähnt die integer-operation. Auch die Rundung kann ein Problem sein, wie immer, die Rundung nach unten kann nicht wünschenswert sein. Ich würde Ihnen raten, gehen Sie für eine Lösung wie in der triava Bibliothek.
Kann formatieren von zahlen mit beliebiger Genauigkeit, in 3 verschiedenen Systemen (SI, IEC, JEDEC) und verschiedenen output-Optionen. Hier sind einige code-Beispiele aus dem triava unit-tests:
Drucken genauen kilo -, mega-Werte (hier mit W = Watt):
Können Sie ein DecimalFormat zum anpassen der Ausgabe:
Für beliebige Operationen auf kilo-oder mega-Werte, können Sie Sie trennen, in Komponenten:
Nur hinzufügen weitere Datei-Einheiten (falls vorhanden), und Sie werden sehen, unit-Größe bis zu, dass die Einheit (wenn Sie Ihre Datei hat, die viel Länge)
Meiner basic-version (Sie KÖNNEN festlegen, einige Konstanten anstelle von computing-POW die ganze Zeit):
bickster Antwort funktioniert ganz in Ordnung, aber das problem dabei ist, dass es Ergebnisse liefert wie
45.00 Bytes
und12.00 KB
. Meiner Meinung nach, die letzten Dezimalstellen sollten entfernt werden, wenn Sie Nullen. Also anstatt45.00 Bytes
und12.00 KB
erhalten Sie45 B
und12 KB
(beachten Sie, dassBytes
wurde geändert, umB
. Dies ist nur für Homogenität, da haben wir KB, MB usw und nicht Kilobyte, Megabyte etc.).Der oben beschriebenen Methode wird einfach geprüft, ob der Wert Nullen als Nachkommastellen.
Besser zu verstehen - https://www.techspot.com/news/68482-quickly-convert-between-storage-size-units-kb-mb.html