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