C# 变量C中的错误求值表达式#

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

我正在使用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 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位)吗?似乎如果他的处理器与其他人在这里使用的处理器不同,这就可以解释不同的结果。这里有一篇相关文章。归根结底,你不能指望浮点数不偏离一小部分,如果你舍入一个非常接近整数的浮点数,你可能会遇到这样的问题。