为什么这会导致0和颠倒?

Chr*_*oph 1 c# math

目前我正在写论文,我遇到了一个我以前从未见过的.Net C#的行为.我在谈论计算中的错误.我实现了这个公式:

1/2*(Theta i-1 + Theta i)+ Sum(Alph k,k = 1,i-1)

此公式适用于4个对象.Theta在声明为float的所有对象中,值为1,5708.Alpha初始化为0,并且每次迭代都会增加.

第一个实施

    float alpha = 0;
    float value = 0;
    for (int sphereCount = 1; sphereCount < this.spheres.Count; sphereCount++)
    {
        value = (1/2) * (this.spheres[sphereCount - 1].Theta + this.spheres[sphereCount].Theta);
        alpha += value;
    }
Run Code Online (Sandbox Code Playgroud)

使用此版本值始终为0.0!所以我改成了:

工作实施

    float alpha = 0;
    float value = 0;
    for (int sphereCount = 1; sphereCount < this.spheres.Count; sphereCount++)
    {
        value =(this.spheres[sphereCount - 1].Theta + this.spheres[sphereCount].Theta) * 1/2;
        alpha += value;
    }
Run Code Online (Sandbox Code Playgroud)

通过移除1/2周围的括号并将其放置在计算结束时它起作用.

为什么会这样???

当你将1/2放在括号中而不依赖于1/2的位置时,结果似乎为0.0.但是当我在最后放置(1/2)时它会产生0.0.这里有人知道为什么吗?

jas*_*son 8

这个

(1 / 2)
Run Code Online (Sandbox Code Playgroud)

计算结果为0,因为它是整数除法.如果你说

(1 / 2f)
Run Code Online (Sandbox Code Playgroud)

要么

(1 / (float) 2)
Run Code Online (Sandbox Code Playgroud)

你会没事的,因为它会强制浮动divsion.或者,甚至更好,只需写0.5.