简单的除法运算返回零?

时间:2012-08-12 07:52:10

标签: java

我错过了什么?

float stepSize = 0.0f;
int activeCircleRadius = 10;
int numSteps = 24;

AiLog.v("init activeCircleRadius " + activeCircleRadius + " numSteps "
                + numSteps);
stepSize = activeCircleRadius / numSteps;
AiLog.v("stepSize is " + stepSize);

操作后,日志中的stepSize始终为零。是否将浮点数除以int?

5 个答案:

答案 0 :(得分:10)

这里两个变量都是整数,因此您执行整数除法:

activeCircleRadius / numSteps

整数除法的结果是整数。结果被截断。

要解决此问题,请将一个(或两个)变量的类型更改为float

float stepSize = 0.0f;
float activeCircleRadius = 10;

或者在分割表达式中添加一个转换为float:

stepSize = (float)activeCircleRadius / numSteps;

答案 1 :(得分:3)

不要进行整数除法

stepSize = activeCircleRadius / (float)numSteps;

总结:是的,因为你将activeCircleRadius除以整数。

答案 2 :(得分:1)

 With all arithmetic operators in Java, the result has the type of the largest operator. For instance: 
- float operator long => float 
- int operator int => int 
- int operator long => long 


float stepSize = 0f;
        float activeCircleRadius = (float) 10.0;
        int numSteps = 24;
        stepSize = activeCircleRadius / numSteps;

答案 3 :(得分:1)

整数除法将结果为0。 它的10/24而不是10.0 / 24.0。 你需要将一个变量设为double或float来得到非零答案。

答案 4 :(得分:0)

你正在进行整数除法,因此在你的答案中不会得到任何小数位。尝试更改:

stepSize = activeCircleRadius / numSteps;

stepSize = activeCircleRadius / (float)numSteps;