我无法正确划分两个数字

时间:2012-10-10 18:08:02

标签: java android

int percent = (score/numberOfQuestions)*100;
progressText.setText(score+"/"+numberOfQuestions+"  "+percent+"%");
无论我多累,

都会返回0%。我尝试将它转换为int,double,float

为什么它会为得分= 5 numberOfQuestions = 8?

之类的数字返回0%

6 个答案:

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

int percent=(int)(((double)score/numberOfQuestions)*100);