Convertir une longue décimal
J'ai essayé de regarder autour pour une solution à cela, mais je ne peux tout simplement pas.
J'en veux pour preuve le mégaoctet représentation de long, qui est calculé en octets.
En Java, vous avez une méthode appelée longueur() que vous pouvez appeler sur un objet de fichier. Il sera de retour de la taille des fichiers en octets stockés dans une longue.
Maintenant, je veux que long et de le transformer en méga-octets plutôt que des octets. Un dossier, je suis en train d'essayer avec à obtenir la taille 161000 octets. Si je ne me trompe pas, cela se traduit par 0.161 mégaoctets. Donc, je le ferais octets /100000 et je m'attends à obtenir 0.161. Le problème est que je n'ai pas.
Si je vais à ma Calculatrice de Windows, ou tout autre calculatrice, l'application peut gérer à montrer ces 3 décimales. Pourquoi est-ce que je ne peux pas faire cela?
J'ai essayé de stocker le résultat dans une double, qui vient juste de sortir 0,0
EDIT:
Une des réponses a été trouvé.
Grâce à wrm:
long b = fichier.length();
double mo = (double) b /(1024 * 1024);
1MB = 1024 * 1024
octets. Pas 1000 * 1000
octets, comme beaucoup le croient.En fait, il est communément 1000 pour disque de stockage et 1024 de mémoire. Dans tous les cas, les OP membres qu'ils sont en la divisant par 100000 (10^5) qui est désactivée par un facteur de 10 - il doit être de 10^6 (ou 1024^2). Que être une erreur de frappe et que nous serions en mesure de dire si l'OP a en fait, nous nous sommes donné le résultat qu'ils obtiennent : -), Tous les problèmes (1) le plus petit exemple de code complet qui a le problème, (2) le comportement attendu et (3) le comportement réel.
C'est une question de MO vs MiB
mre résolu! Vous pouvez le voir plus bas. Merci d'être si rapide, si! 😀
OriginalL'auteur OmniOwl | 2012-05-14
Vous devez vous connecter pour publier un commentaire.
peut-être un peu de code permettrait de clarifier le problème, mais je pense que vous avez une sorte de conversion implicite en cours.
quelque chose comme ceci devrait fonctionner:
OriginalL'auteur wrm
Vous avez besoin de convertir un des arguments pour un double, non seulement le résultat.
Essayez de diviser par
1000000.0
à la place.OriginalL'auteur Oliver
Ce que vous faites wrongis que vous utilisez Intégrale division, où vous devez utiliser la virgule flottante.
Si vos deux opernads font partie intégrante (long int), vous obtenez inegral résultat - c'est à dire qu'il n'aura pas de partie décimale.
Si vous voulez avoir de la division décimale, au moins l'un de vos opernads a des abeilles float ou doule.
vous obtenez ce que par l'ajout d'.0 à nombre littéral, ou utilisez des données de la variable.
Je vous suggère aussi d'utiliser BigDecimal classe qui va toujours de rendement résultat correct, pour les longues et double cant représenter tous les nombres décimaux dans leurs gammes. (ils ont une précision limitée)
OriginalL'auteur Hurda
Vous pouvez prendre un coup d'oeil à la DecimalFormat Classe et le format de votre résultat que la façon dont vous le souhaitez.
OriginalL'auteur npinti
Ce fait de la magie pour nous.
OriginalL'auteur CodeBulls Inc.