У меня возникла проблема при попытке рассчитать процент на основе списка массивов.
int total = 0;
double percentage = 0;
for(int i = 0; i < accountList.size(); i++){
total += Integer.parseInt(accountList.get(i).getTotalCount());
}
for(int j = 0; j < accountList.size(); j++){
percentage = Math.round(Double.parseDouble(accountList.get(j).getTotalCount()) / (double)total);
Log.i("PCT", String.valueOf(percentage));
}
По сути, первый цикл предназначен для расчета общей суммы. Затем, что касается второго цикла, я перебираю каждый элемент в списке массива, деленный на общее количество, чтобы получить процент.
Однако, когда я пытаюсь распечатать процент, я получаю 0,0. Но затем, когда я распечатал общую сумму, она вернула мне сумму.
Любые идеи?
Заранее спасибо.
2 ответа
Скорее всего, все ваши фракции меньше 0,5, поэтому, округляя фракцию, вы продолжаете получать 0
.
Я подозреваю, что вы хотите напечатать процент, который в 100 раз превышает фракцию.
long percentage = Math.round(100.0 *
Double.parseDouble(accountList.get(j).getTotalCount()) / total);
Или же
long percentage = 100L*Integer.parseInt(accountList.get(j).getTotalCount()) / total;
Использование целочисленного результата может быть не идеальным. Я предлагаю добавить такую цифру точности.
double percentage = 1000L
* Integer.parseInt(accountList.get(j).getTotalCount())
/ total / 10.0;
Умножив в 10 раз то, что вам нужно для вычисления целых чисел, вы получите дополнительную цифру точности при делении на 10,0.
Например
100 * 1 / 3 == 33
1000 * 1 / 3 / 10.0 == 33.3
% = Value / Total * 100
Итак, расчет должен быть:
percentage = Math.round((Double.parseDouble(accountList.get(j).getTotalCount()) * 100.0) / (double)total);
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.