我想我缺少明显的东西。或者我脑子里有一些愚蠢的错误,但是无论如何我都无法弄清楚。
我的代码是这个。
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);
}
我得到的是
对于
Radius = 2
和Ringnumber = 2
,两次都将Y
表示为0
。在我看来应该是-2和-3。为什么不呢在类似这样的其他厕所中,我也有类似的错误,但有些工作还可以。
我认为它不是那么困难的数学运算-2 * 2/2减去零倍。应该是-2吗?
最佳答案
这是重点:
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 suffix1d/2d
= 0.5这样,您可以明确地说这些值是双精度值,而不是整数。因此,结果值也将增加一倍。
关于c# - 简单的数学出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43964430/