C# 变量C中的错误求值表达式#
我正在使用Visual Studio 2015 C#和Unity。计算后,C# 变量C中的错误求值表达式#,c#,unity3d,C#,Unity3d,我正在使用Visual Studio 2015 C#和Unity。计算后,cell.x的值错误 PointCell cell = new PointCell(); cell.x = (int)((point.x - (discretization / 2f)) / discretization); cell.y = (int)((point.y - (discretization / 2f)) / discretization); return cell; point.x = 4.32f an
cell.x
的值错误
PointCell cell = new PointCell();
cell.x = (int)((point.x - (discretization / 2f)) / discretization);
cell.y = (int)((point.y - (discretization / 2f)) / discretization);
return cell;
point.x = 4.32f and discretization = 0,32f
它应该评估为13,但它评估为12
请参阅打印调试表
手表:
有人能解释一下吗
编辑:
点单元代码:
public class PointCell
{
public PointCell()
{
x = y = 0;
}
public PointCell(int x, int y)
{
this.x = x;
this.y = y;
}
public int x, y;
}
类
PointCell
来自何处?最有可能的是浮点不准确。结果可能是12.99999
,当转换为int时,它将被截断为12
。也许您应该使用Math.Round
,而不是转换为int
?@DStanley(int)((x点-(离散化/2f))/discretation)
计算结果为13,因此我假设由于某种原因,cell.x
的getter或setter正在将其获取/设置为12。对我来说是13。看看:这不是取决于处理器吗?浮点2不是真的不是2吗?它的精度不是取决于处理器位(32或64位)吗?似乎如果他的处理器与其他人在这里使用的处理器不同,这就可以解释不同的结果。这里有一篇相关文章。一句话,你不能依赖于浮点不偏离一小部分,如果你舍入一个非常接近整数的浮点,你可能会遇到这样的问题。类PointCell
从哪里来?很可能是浮点不准确。结果可能是12.99999
,当转换为int时,它将被截断为12
。也许您应该使用Math.Round
,而不是转换为int
?@DStanley(int)((x点-(离散化/2f))/discretation)
计算结果为13,因此我假设由于某种原因,cell.x
的getter或setter正在将其获取/设置为12。对我来说是13。看看:这不是取决于处理器吗?浮点2不是真的不是2吗?它的精度不是取决于处理器位(32或64位)吗?似乎如果他的处理器与其他人在这里使用的处理器不同,这就可以解释不同的结果。这里有一篇相关文章。归根结底,你不能指望浮点数不偏离一小部分,如果你舍入一个非常接近整数的浮点数,你可能会遇到这样的问题。