10
votes

La sortie longue du nombre de flotteurs montre des lettres

J'ai le code suivant:

String curDir = ".";
File fileObject = new File(curDir);
File[] fileList = fileObject.listFiles();

float fileLengthMegabytes = (float)fileList[i].length() / 1000000;


3 commentaires

C'est un type d'affichage à point flottant parfaitement normal. E représente fois 10 à la puissance de , par ex. "3,88 fois 10 à la puissance de -4".


On dirait que vous imprimez simplement une notation scientifique. La valeur n'a pas changé. Découvrez Format de numéro Java


De combien de réponses en double ont besoin?


5 Réponses :


6
votes

C'est la façon dont Java (et de nombreuses langues) affiche des chiffres de points flottants. E signifie simplement 10 ^ , donc 3.88e-4 est une autre façon d'écrire 3.88 x 10 ^ -4 , qui est la même que 0.000388 .

Ce format est appelé Notation scientifique . La notation électronique est une représentation informatique de la notation scientifique.

Le reste de votre inexactitude (388 VS 311) est que 1000000 n'est pas le nombre exact que vous souhaitez diviser. Voir les autres réponses pour plus de détails.


1 commentaires

Existe-t-il un moyen de remplacer E avec 10 ^ en l'imprimant?



21
votes

C'est la notation scientifique.

Et vous obtenez 388 au lieu de 311, car vous divisez à 1000000 au lieu de 1048576 (1024 * 1024)

EDIT: 311 n'est pas atteint même avec 1048576, De cette façon, vous obtenez 370 ... donc l'erreur est probablement dans votre Calc;)

comme Décrit ici , il vous suffit de convertir votre notation scientifique en une notation décimale via un formateur. xxx

Exemple d'exécution : http://ideone.com/2lkkv7 xxx

sortie :

MB1 en notation scientifique: 3.88e-4

MB1 en notation décimale: 0.000388

MB2 en notation scientifique: 3.7002563E-4

MB2 en notation décimale: 0.0003700256


0 commentaires

0
votes

Si vous voulez des chiffres normaux (sans notation scientifique), utilisez biginteger xxx

Remarque: normal double suffirait également.


0 commentaires

0
votes

Pour obtenir la notation que vous souhaitez, utilisez un formateur:

final Formatter f = new Formatter();
final String out = f.format("%8.6f", fileLengthMegabytes);


0 commentaires

1
votes

3.88e-4 Comme mentionné précédemment est une représentation dans le Notation électronique scientifique .

Si vous souhaitez l'imprimer ou convertir en chaîne, vous pouvez écrire quelque chose comme celui-ci: xxx

et vous avez: xxx

respectueusement


0 commentaires