我正在尝试将两个数字除以得到一个百分比,然后将其打印出来。这是相关的方法:
public void process_winner(String candidates[], int votes[])
{
double percent = (mostVotes / votes.length) * 100;
if (mostVotes > votes.length / 2)
System.out.println("Winner: " + candidates[mostVotesIndex] + "(" + percent + "%)");
else
System.out.println("None (no majority)");
System.out.println("");
}
问题在于:
double percent = mostVotes / votes.length;
mostVotes
是int
,值为6,votes.length
为10.我使用调试器对此进行了验证。
我的百分比变量显示的值为0.0,显示为60.0
答案 0 :(得分:5)
您需要转换为double
,或更改操作顺序。
这样做:
double percent = (mostVotes * 100 ) / votes.length;
答案 1 :(得分:3)
您需要将其强制转换为double
,否则它将是整数除法,因此精度将会丢失。
double percent = ((double) mostVotes / votes.length) * 100;
答案 2 :(得分:1)
这是Integer division,按预期工作
如果要在分割整数时获得double
值,请使用:
double percent = mostVotes * 1.0 / votes.length;
BTW,为了获得百分比,你需要将它加倍100:
double percent = mostVotes * 100.0 / votes.length;
答案 3 :(得分:1)
将您的公式设为(mostvotes * 100)/votes.length
在您的情况下,执行是:
mostVotes/votes.length
导致6/10为整数除法将其更改为double percent = (mostVotes * 100 ) / votes.length;
执行顺序变为
mostVotes * 100
,即6 * 100 600/votes.length
,即600/10 = 60 这应该给你正确的输出
答案 4 :(得分:0)
你需要更改它或“强制转换”为双倍。 你做的是这个
double percent = (mostVotes / votes.length) * 100;
你认为你在做什么是这样的:
现在实际发生的是:
在解释你做错了之后知道我会解释什么是正确的,然后向你解释。
然后我们收到60.< ---这是你的答案。
(mostVotes * 100)/ votes.length
这背后的原因是因为你从来没有真正满足这种计算方式的十进制数。
你当然可以将大多数投票变成双倍。但这样做只是一种更加便利的方式。
这更像是一个“算法问题”,而不是一个程序问题。