Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我不能正确地划分两个数字_Java_Android - Fatal编程技术网

Java 我不能正确地划分两个数字

Java 我不能正确地划分两个数字,java,android,Java,Android,无论我有多累,返回0%。我试着把它转换成int,double,float 为什么分数=5 numberOfQuestions=8这样的数字返回0%?您需要对其中一个进行强制转换:- int percent = (score/numberOfQuestions)*100; progressText.setText(score+"/"+numberOfQuestions+" "+percent+"%"); 因为,5/10已经是0。。将最终结果强制转换为任何类型只能得到0,如下代码所示:- flo

无论我有多累,返回0%。我试着把它转换成int,double,float


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

您需要对其中一个进行强制转换:-

int percent = (score/numberOfQuestions)*100;
progressText.setText(score+"/"+numberOfQuestions+"  "+percent+"%");
因为,
5/10
已经是0。。将最终结果强制转换为任何类型只能得到0,如下代码所示:-

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

这也将为您提供
0.0
。因为您正在将
0
转换为浮动。没关系。

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


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

问题是,将两个整数相除会得到结果的整数部分。因此,
(score/numberOfQuestions)
将始终为0。
你应该做的是

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

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

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

int percent = (score * 100 / numberOfQuestions);

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

可以使用100.0将其自动转换为浮点。请忽略使用浮点的建议。当然,它可以解决这个问题,但是你会遇到另一组问题,你的下一个问题可能是关于如何减少小数的数量。@Eduardo不,那将是
(5/8)*100.0
,也就是
0*100.0
,也就是
0.0
。双精度转换将在整数除法之后进行。@harold:这取决于他是否希望百分比包含小数。此外,舍入将始终向下。@Eduardo舍入可以固定。是的,不管怎么说,使用浮点还是有充分的理由的,但是如果你看看他的旧代码,他显然不希望有小数。+1这绝对是处理这个运算的最好方法,只使用
int
math。有一件事我不明白:如果
score
是整数,为什么将它乘以100会变成一个双精度数?@user1301428它不会变成双精度数。它仍然是一个整数,但在不转换为另一种形式的情况下,这是一种更快的查找数字百分比的方法。如果不使用double,小数位数的舍入将不起作用。您假设
分数
numberOfQuestions
属于
类型!仅使用double for
percent
无法解决任何问题,因为右侧的计算全部在ints上运行->
(分数/数字问题)
将为0,如果
分数完全正确,我很抱歉。我假设@RichardJPLeGuen说了什么。我已经解释了我答案中遗漏的部分。
int percent = 100*score/numberOfQuestions;
int percent=(int)(((double)score/numberOfQuestions)*100);