我对C ++有一个奇怪的问题。在OpenGL代码中,我尝试用这种方式计算一个简单的表达式
void mouse(int button, int state, int x, int y){
double posx = (x-300)/300;
double posy = -1*(y-300)/300;
switch(button){
case GLUT_LEFT_BUTTON:
if(state == GLUT_DOWN){
if(count < max){
particles[count].x = posx;
particles[count].y = posy;
particles[count].active = true;
count++;
}
glutPostRedisplay();
}
break;
default:
break;
}
}
但由于某种原因,每个粒子都出现在屏幕的中心。当我用
替换double posx = (x-300)/300
时奇怪
double posx;
posx = x-300;
posx = posx/300;
(同样适用于y)代码有效......任何人都知道它为什么会发生?也许这是一件非常简单的事情,我做错了。自从我使用C ++以来已经很久了,很抱歉,如果这是我的一个简单错误。
答案 0 :(得分:4)
x
是int
,300
也是int
。因此,计算将使用整数算术来完成,即忽略余数。这就是为什么当您期望0
和0.0
之间的某个内容时,该部门会返回1.0
。 对于计算结果,将结果保存到哪种类型的变量无关紧要。
在第二个示例中,您将x-300
分配给double posx
。所以从这一点开始,你会做浮点算术,从而产生预期的结果。
使其发挥作用的另一种方法是将300
替换为300.0
。