所以......如果它们相等,我必须检查一些值。但他们从来没有,我知道他们应该,我调试了我的申请并得出了以下结论
-2.5f - Mathf.Round(1.1f)* 0.6f - (-3.1f)doest不等于0但是它的值是-1.192093E-07
对此有合理的解释并且有解决方法吗?我真的需要这种格式的等式。
PS:所有值都在这里硬编码,但它们是变量,它们也有其他值。问题是结果应为0
这是一行代码: Debug.Log(string.Format(" {0}", - 2.5f - Mathf.Round(1.1f)* 0.6f - (-3.1f)));
在OS X 10.9.5上使用Unity 4.5.1f3和Monodevelop 4.0.1。
答案 0 :(得分:1)
如评论中所述-1.192093E-07不是无穷大,它非常接近于零。注意" E"之后的减号。值为.0000001192093
。
当您比较浮点数时,不应使用==
,因为浮点运算会导致这种小错误。相反,你可以使用这样的东西:
float diff = aValue - bValue;
if(diff < 0.000001f && diff > -0.000001f){
}
阅读&#34;每个程序员应该了解浮点运算&#34;这可能是个好主意。例如here。