Macos 应为0的简单算术演算返回无穷大

Macos 应为0的简单算术演算返回无穷大,macos,math,unity3d,mono,monodevelop,Macos,Math,Unity3d,Mono,Monodevelop,所以…我必须检查一些值是否相等。但它们从来都不是,我知道它们应该是,我调试了我的应用程序,得出了以下结论 -2.5f-数学圆(1.1f)*0.6f-(-3.1f)不等于0,但其值为-1.192093E-07 对此是否有合理的解释,是否有解决办法?我真的需要这个格式的方程式 PS:这里所有的值都是硬编码的,但它们都是变量,它们还有其他值。问题是什么时候结果应该是0 下面是一行代码: Log(string.Format(“{0}”,-2.5f-Mathf.Round(1.1f)*0.6f-(-3.1

所以…我必须检查一些值是否相等。但它们从来都不是,我知道它们应该是,我调试了我的应用程序,得出了以下结论

-2.5f-数学圆(1.1f)*0.6f-(-3.1f)不等于0,但其值为-1.192093E-07

对此是否有合理的解释,是否有解决办法?我真的需要这个格式的方程式

PS:这里所有的值都是硬编码的,但它们都是变量,它们还有其他值。问题是什么时候结果应该是0

下面是一行代码: 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。

就像在评论中所说的-1.192093E-07不是无限的,它非常接近于零。注意“E”后面的减号。该值为
.0000001192093

在比较浮点数时,千万不要使用
=
,因为浮点数运算会导致这种小错误。相反,您可以使用如下内容:

float diff = aValue - bValue;
if(diff < 0.000001f && diff > -0.000001f){

}
float diff=aValue-bValue;
如果(差异<0.000001f和&diff>-0.000001f){
}

例如,阅读“每个程序员都应该知道的浮点算术知识”可能是个好主意。

也在Unity 4.6.0f3中复制。对于此类问题,请使用unity3d标记。Ignacio是正确的。谢谢请注意-1.192093E-07不是无限大。它只是很小,甚至ε比较也不是一个很好的解决方案。在这方面有一个很好的阅读资源。