C#mod在Unity 3D中失败

C#mod在Unity 3D中失败,c#,unity3d,C#,Unity3d,我正在执行以下操作,但预期值不是0,而是2.384186E-07: Vector3 t = this.transform.position - _startPosition; float xRem = t.x % 1; float zRem = t.z % 1; 在这种情况下: this.transform.position = 2.5, 0, 3.5 _startPosition = 1.5, 0, 1.5 xRem正确,但zRem的值为2.384186E-07 有没有关于如何解决这个问题

我正在执行以下操作,但预期值不是0,而是2.384186E-07:

Vector3 t = this.transform.position - _startPosition;
float xRem = t.x % 1;
float zRem = t.z % 1;
在这种情况下:

this.transform.position = 2.5, 0, 3.5
_startPosition = 1.5, 0, 1.5
xRem
正确,但
zRem
的值为2.384186E-07

有没有关于如何解决这个问题的建议

更新#1: 当使用上面的值时,它不应进入该块,但由于
zRem
的原因,它会进入该块

if(!Mathf.Approximately(xRem, 0f) || !Mathf.Approximately(zRem, 0f))
{
     return;
}

嗯,国防部没有失败。。。浮点运算总是涉及一定程度的精度/误差

我知道,Mathf,大概是要考虑ilthis,但是Unity有它自己的Epsilon值来比较浮点数,你猜怎么着,它的值没有被记录下来

(根据浮点值的表示模型,可能是系统相关的。可能是IEEE一致的,我不知道)

问题是:您应该定义符合游戏逻辑的阈值使用,如下所示:

if(xRem <= threshold)

if(xRem在这里尝试过,效果很好..请提供更多信息?您希望它是什么?3.5-1.5=2,2%1=0,2.384186E-07是一个非常小的数字。您尝试过使用double吗?我希望值为零。如果我用硬编码的值创建一个向量3,它会工作。我检查了
t
变量,所有值都是正确的rect,但计算失败。浮点值实际上很少等于零。在必要时,使用
Float.Epsilon
进行“零”比较。不过,我不太清楚为什么会出现这样低精度值的问题。我添加了一个示例,说明如何使用和比较这些变量。
if(Mathf.abs(xRem) <= threshold)