java преобразует ГБ, Мб, КБ и байт в double с точностью

#java #numbers

#java #числа

Вопрос:

Я загружаю файлы разных размеров и хотел бы
показать удобный для пользователя вывод относительно размера файла.

Я пробовал это:

 double line= (totalBytes/(1024*1024));
DecimalFormat dec = new DecimalFormat("0.00");
String result = dec.format(line);
result = result.concat("MB");
  

Это работает только при размере около одного МБ. Если размер равен 1200000 байт, я получаю «1,2 МБ».
Но как сделать это динамическим, если допустим, размер файла равен 46 байтам.

ОБНОВИТЕ, как отобразить размер в 46 байт, например, 0,000046 МБ или 500 КБ, например, 0,5 МБ.
Это должно быть сделано на лету. Я хочу, чтобы удобный для пользователя вывод всегда показывал X.XMB
независимо от того, сколько байт.

Комментарии:

1. Кстати, (totalBytes/(1024*1024)) выполняет деление на основе целых чисел. Попробуйте totalBytes/(double)(1024*1024)) получить результат с плавающей запятой.

Ответ №1:

Простейшим решением является проверка того, является ли число больше / меньше множителя, и применение деления соответственно.

Итак

 if (totalBytes < 1024){

 //bytes
}else if (totalBytes < 1024*1024){
 //kilobytes

} //etc
  

Комментарии:

1. да, это то, чего я хочу. но как отобразить размер в 46 байт, например, 0,000046 МБ или 500 КБ, например, 0,5 МБ. Я обновляю свой вопрос, это была заработная плата

2. (double) totalBytes / (double)(1024 * 1024) Но затем не форматируйте десятичную дробь как 0.00. Если только вы не собираетесь заканчивать это. Но я вряд ли думаю, что 0,000046 МБ — это «удобный для пользователя вывод»

Ответ №2:

Конечно, вам понадобится

 double line= ((double)totalBytes/(1024*1024));
  

Комментарии:

1. Спасибо. кстати, я обновляю вопрос, поскольку было трудно точно определить, что мне нужно.