Деление длинных длинными 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. Поплавки дадут вам более точный результат.