近日在开发《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年以来,这是遇到的第一个坑。
在处理完之后发现自己虽然可以处理一些问题,但是基础还差很多,以后还需要加强基础知识的学习。