La conversion de KO MO, GO, to dynamiquement
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;
}
C'est une méthode qui doit renvoyer la taille en GO,MO, KO ou la TUBERCULOSE. La valeur d'entrée est en KO.
par exemple, résulter de 1245 devrait être comme 1.21 MO, mais ce que je reçois est de 1,00 MO.
OriginalL'auteur pedja | 2012-11-24
Vous devez vous connecter pour publier un commentaire.
Vous effectuez
integer division
. Si le résultat de la division est égalementinteger
. Et la partie fractionnaire est tronqué.Changer votre division à
floating point division
: -Aussi, votre comparaison est défectueux. Vous devez faire la comparaison avec
1
.Idéalement, j'aimerais changer votre rapport à: -
Vous avez besoin de comparer avec la hausse de l'unité première, et de passer ensuite à la partie inférieure.
else if
au lieu de simplementif
pourm
,g
, ett
, car même un petit fichier peut être 0.00000000001 la TUBERCULOSE (qui est plus grande que zéro).Ah! n'a pas remarqué.
Yo devez faire la comparaison avec
1
, et vous le faites avec0
. Changement de tous les cas dek > 1
,g > 1
, ...De vérifier la modification de la poste. Vous avez besoin de modifier votre
if
comparaison un peu.Ça fonctionne dans mon cas.
OriginalL'auteur Rohit Jain
Une version modifiée. Seuls les appels format une fois. Inclut Les "Octets".
OriginalL'auteur bickster
J'aime ceci:
OriginalL'auteur Sampisa
Le problème est que vous utilisez division entière. Modifiez votre code pour:
Dans votre code original,
double m = size/1024
aurait pour effet de diviser l'entiersize
par1024
, tronquer le résultat à un nombre entier, et seulement ensuite le convertir endouble
. C'est pourquoi la partie fractionnaire a été de se perdre.OriginalL'auteur NPE
Vous effectuez de la division entière,
c'est à dire, 31/15 donnera 2, pas 2.quelle que soit
ajoutez simplement le numéro d'
D
oud
qui désigne comme un double et vous serez amendeOriginalL'auteur PermGenError
Ce n'est pas facile à obtenir ce droit. Rohit Jain mentionné l'entier de l'opération. Aussi arrondi peut être un problème, comme toujours arrondi vers le bas peut ne pas être souhaitable. Je vous conseille d'aller pour une solution disponible, comme dans le triava bibliothèque.
Il peut formater les nombres avec une précision arbitraire, dans 3 différents systèmes (SI, IEC, JEDEC) et diverses options de sortie. Voici quelques exemples de code à partir de la triava tests unitaires:
Impression exacte kilo, mega valeurs (ici avec W = Watt):
Vous pouvez passer une DecimalFormat pour personnaliser la sortie:
Pour arbitraire des opérations sur les kilo, mega valeurs, vous pouvez les diviser en composants:
OriginalL'auteur Christian Esken
Simplement ajouter plus d'un fichier d'unités (si tous les disparus), et vous verrez la taille de l'unité jusqu'à l'unité (si votre fichier a beaucoup de longueur)
OriginalL'auteur Vishwajit R. Shinde
Ma version de base (vous POUVEZ définir des constantes au lieu de l'informatique POW tout le temps):
OriginalL'auteur Buffalo
bickster réponse fonctionne très bien, mais le problème c'est qu'il renvoie des résultats comme
45.00 Bytes
et12.00 KB
. À mon avis, les derniers chiffres décimaux doivent être supprimés s'ils sont des zéros. Ainsi, au lieu de45.00 Bytes
et12.00 KB
, vous obtenez45 B
et12 KB
(notez queBytes
a été modifié pourB
. C'est juste pour une question d'uniformité, puisque nous avons KO, MO, etc et pas de kilo-octets, méga-octets, etc).La méthode ci-dessus vérifie simplement si la valeur a de zéros que de chiffres décimaux.
OriginalL'auteur X09
Pour mieux comprendre - https://www.techspot.com/news/68482-quickly-convert-between-storage-size-units-kb-mb.html
OriginalL'auteur Ilya Budu