为什么这个计算(除法)会返回错误的结果?

Ren*_* R. -3 c++

我在使用 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但出于某种原因,每个粒子都出现在屏幕中央。奇怪的是,当我替换double posx = (x-300)/300

double posx;
posx = x-300;
posx = posx/300;
Run Code Online (Sandbox Code Playgroud)

(与 y 相同)代码有效......有人知道为什么会这样吗?也许这是一件非常简单的事情,我做错了。自从我使用 C++ 已经有很长时间了,如果这是我的一个简单错误,那么抱歉。

wkl*_*wkl 5

x是的int300是的int,太。所以计算将使用整数算法完成,即忽略余数。这就是为什么0当您期望0.0和之间出现某些内容时,除法会返回的原因1.0对于计算结果,将结果保存到哪种类型的变量并不重要。

在您的第二个示例中,您分配x-300double posx. 因此,从现在开始,您将进行浮点运算以得出预期结果。

使其工作的另一种方法是替换300300.0.