简单的数学错误

时间:2017-05-14 13:28:26

标签: c# math

我猜错了一些明显的东西。或者在我的头脑中有一些愚蠢的错误,但无论如何我无法弄明白。

我的代码是这样的。

for (int i = 0; i < ringNumber; i++)
{
    float x = (radius * ringNumber) - (i * radius);
    float y = (-1/2 * radius * ringNumber) - (i * 1/2 * radius);
    Debug.Log ("Radius: " + radius + ", Ringnumber : " + ringNumber + ", i : " + i);
    Debug.Log ("In Loop 3 Vertical : " + x + "  " + y);
}

我得到的是

enter image description here

对于Radius = 2Ringnumber = 2Y两次都以0的形式发出。在我看来它应该是-2和-3。为什么不呢?

我在这样的其他厕所里也有类似的错误,但有些问题还算不错 它不是那么困难的数学我认为-2 * 2/2减去零次的东西。应该是-2还是不?

1 个答案:

答案 0 :(得分:4)

这就是重点:

  

1.0 / 2.0 = 0.5和1/2 = 0

当划分整数值时,结果也是整数。所以1/2将舍入为零。 使用1.0/2.0

for (int i = 0; i < ringNumber; i++)
{
        float x = (radius * ringNumber) - (i * radius);
        float y = (-1.0/2.0 * radius * ringNumber) - (i * 1.0/2.0 * radius);
        Debug.Log ("Radius: " + radius + ", Ringnumber : " + ringNumber + ", i : " + i);
        Debug.Log ("In Loop 3 Vertical : " + x + "  " + y);
}

作为最佳做法,请始终使用如下数值:#.0,以防止此类错误。您也可以尝试这种替代方案。 more suffix

1d/2d = 0.5

这样你明确地说那些值是double并且不是整数。因此,结果值也将加倍。