Деление длинных длинными 0

Я пытаюсь вычислить% используемого дискового пространства в Windows, а totaldrive обозначает общее дисковое пространство диска c в Long и freedrive dentoes свободное пространство в Long.

 long totaloccupied = totaldrive - freedrive;

Здесь вычисляется% использования

 Long Percentageused =(totaloccupied/totaldrive*100);
 System.out.println(Percentageused);

Оператор печати возвращает 0. Может ли кто-нибудь помочь, поскольку я не получаю желаемое значение

Ответ 1

Вы, вероятно, делите long на long, что относится к операции (long/long = long), что дает длинный результат (в вашем случае 0).

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

Long Percentageused = (long)((float)totaloccupied/totaldrive*100);

Ответ 2

Вы делаете целочисленное деление! Поскольку totaloccupied меньше, чем totaldrive, разделение обоих дает ответ 0. Сначала вы должны конвертировать в двойное число:

double percentageUsed = 100.0 * totalOccupied / totalDrive;

Обратите внимание, что добавление десятичной точки к 100 гарантирует, что оно будет рассматриваться как double.

Ответ 3

Это будет оценено слева направо, первое целочисленное деление вернет 0 (например, 8/10 оценивает до 0). Либо преобразуйте значения в float, либо выполните 100 * a/b. Поплавки дадут вам более точный результат.