2015-02-06 280 views
0

我在尝试根据数组列表计算百分比时遇到了一些问题。Java根据数组列表中的项计算百分比

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。但是当我把总数打印出来的时候,它确实给我返回了总数。

任何想法?

在此先感谢。

回答

1

最有可能你所有的分数都小于0.5,所以当你一轮派你不断收到0

我怀疑你想打印的百分比是100 x该派别。

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 
+0

我明白了。非常感谢。它正在工作! – 2015-02-06 12:55:33

+0

所以我们假设我希望它像33一样。通过使用* 100,我最终还需要除以10。 – 2015-02-06 13:01:23

+0

@IWasSoLost你只需要x10和/10.0,如果你想显示一个数字的精度,否则只需使用'long'而不是'double' – 2015-02-06 13:03:13

2

% = Value/Total * 100

所以计算应该是:

percentage = Math.round((Double.parseDouble(accountList.get(j).getTotalCount()) * 100.0)/(double)total); 
+0

我明白了。非常感谢。现在正在工作 – 2015-02-06 12:55:11