10
int percent = (score/numberOfQuestions)*100;
progressText.setText(score+"/"+numberOfQuestions+"  "+percent+"%");

无论我累什么都会返回 0%。我尝试将其转换为 int、double、float

为什么像 score=5 numberOfQuestions=8 这样的数字返回 0%?

4

6 回答 6

15

问题是两个整数相除会给你结果的整数部分。所以, (score/numberOfQuestions)将永远是 0。
你应该做的是

int percent = (score * 100 / numberOfQuestions);

然后*100将首先执行,然后除法会给你正确的结果。

于 2012-10-10T18:11:43.467 回答
6

您需要对它们中的任何一个进行强制转换:-

float percent = ((float)score/numberOfQuestions)*100;

因为,5 / 10已经是 0.. 将最终结果转换为任何类型只会给你 0,如下面的代码: -

float percent = ((float)(score/numberOfQuestions))*100;

这也会给你0.0。由于您0要浮动。没关系。。

于 2012-10-10T18:09:23.220 回答
3

检查你的整数数学。如果不强制转换小值,您的代码将无法工作,因此只需移动操作:

int percent = 100*score/numberOfQuestions;
于 2012-10-10T18:12:33.767 回答
2

您正在使用int(整数)来存储该百分比。尝试使用floatdouble代替得分和问题数量floatdouble感谢您的评论,我完全跳过了这个......)。如果您在显示该值时遇到问题,我建议您使用DecimalFormat对其进行格式化。

int如果您想在结果中包含小数,我建议您使用其他替代方法,而不是使用纯数学来计算和存储百分比。

于 2012-10-10T18:09:28.583 回答
1

score/numberOfQuestions将始终提供一个介于 0 和 1 之间的数字。您有两种选择,具体取决于您需要计算的准确度。对于大多数情况,您可以将表达式更改为(score * 100)/numberOfQUestions。这将为您提供两位数的准确性。score * 100如果溢出一个 int就会出现问题。鉴于您的变量名称,我怀疑在这种情况下会发生这种情况。第二种可能性是将表达式转换为 double 以进行计算。

于 2012-10-10T18:14:54.617 回答
0
int percent=(int)(((double)score/numberOfQuestions)*100);
于 2012-10-10T18:17:22.447 回答