判断2个float参数相等的办法

近日在开发《3D贪吃蛇》项目过程中发现了一个有趣的现象

Vector3 vec1 = new Vector3(0f , 0f , 3.6f);
Dictionary<Vector3,int> dict = new Dictionary<Vector3,int>();

dict.add(vec1 , 1);

Vector3 vec2 = new Vector3(0f , 0f , 1f*1.2f*3f);

if(dict.Dontainkey(vec2))
{

}
else
{
    Debug.LogErr("没找到对应的数据")
}

总是会直行到 “没找到对应的数据”。最后发现3.6f 仅仅使用“==”运算符并不能相等。

由于计算机是用二进制来存储和处理数字,不能精确表示浮点数。

所以浮点数在计算过程中会丢失精度,所以引入如下的判断float相等的方法。

float a = 3.6f;
float b = 1f*1.2f*3f;

float c = Math.Abs(a-b);

if(c <= 0.00001)
{
    Debug.Log("两个数相等");
}
else
{
    Debug.Log("两个数不等");
}

做游戏开发1年以来,这是遇到的第一个坑。

在处理完之后发现自己虽然可以处理一些问题,但是基础还差很多,以后还需要加强基础知识的学习。

猜你喜欢

转载自635509712.iteye.com/blog/2238986
今日推荐