Вы делитесь на биты, но ваш ввод уже в байтах, а не битах. Таким образом, за исключением вычисления <КБ, вы получите результаты, которые составляют 1/8 от ожидаемого размера. </p>
Дайте следующий код вихрем (операторы печати добавлены только для проверки работоспособности делителей):
double KiB = Math.pow(2, 10);
double MiB = Math.pow(2, 20);
double GiB = Math.pow(2, 30);
double TiB = Math.pow(2, 40);
double Pib = Math.pow(2, 50);
NumberFormat df = DecimalFormat.getInstance();
System.out.println("KiB: " + df.format(KiB));
System.out.println("MiB: " + df.format(MiB));
System.out.println("GiB: " + df.format(GiB));
System.out.println("TiB: " + df.format(TiB));
System.out.println("Pib: " + df.format(Pib));
if (size < KiB) {
return size + " byte";
} else if (size < MiB) {
double result = size / KiB;
return floatForm(result) + " KiB";
/* remaining code is identical to yours */