int percent = (score/numberOfQuestions)*100;
progressText.setText(score+"/"+numberOfQuestions+" "+percent+"%");
无论我多累,都会返回0%。我尝试将它转换为int,double,float
为什么它会为得分= 5 numberOfQuestions = 8?
之类的数字返回0%答案 0 :(得分:13)
问题是除以两个整数会得到结果的整数部分。因此,(score/numberOfQuestions)
将始终为0.
你应该做的是
int percent = (score * 100 / numberOfQuestions);
然后首先执行*100
,然后除法将给你正确的结果。
答案 1 :(得分:5)
你需要施放其中任何一个: -
float percent = ((float)score/numberOfQuestions)*100;
因为,5 / 10
已经是0 ..将最终结果转换为任何类型只会给你0,如下面的代码所示: -
float percent = ((float)(score/numberOfQuestions))*100;
这也会给你0.0
。由于您要将0
转换为float。无所谓..
答案 2 :(得分:3)
检查整数数学。如果没有为小值进行强制转换,您的代码将无法运行,因此只需移动操作:
int percent = 100*score/numberOfQuestions;
答案 3 :(得分:2)
您使用int
(整数)来存储该百分比。尝试使用float
或double
代替得分和问题数float
或double
(感谢您的评论,我完全跳过了这个......)。如果您在显示值时遇到问题,建议您使用DecimalFormat对其进行格式化。
如果您想在结果中使用小数,我建议使用其他替代方法,而不是使用纯int
数学来计算和存储百分比。
答案 4 :(得分:1)
score/numberOfQuestions
将始终提供介于0和1之间的数字。根据计算的准确程度,您有两种选择。对于大多数情况,您可以将表达式更改为(score * 100)/numberOfQUestions
。这将给你两位数的准确性。如果score * 100
溢出int,则会出现问题。鉴于你的变量名称,我怀疑在这种情况下会发生这种情况。第二种可能性是将表达式转换为计算的两倍。
答案 5 :(得分:0)
int percent=(int)(((double)score/numberOfQuestions)*100);