小数Round取整时,以0.5结尾的小数取整结果问题,Round(1.5)=2,并且Round(2.5f)=2 ???
测试代码:
Debug.Log(Mathf.Round(1.5f)); //2
Debug.Log(Mathf.Round(2.5f)); //2
Debug.Log(Mathf.Round(3.5f)); //4
Debug.Log(Mathf.Round(4.5f)); //4
Debug.Log(Mathf.RoundToInt(1.5f)); //2
Debug.Log(Mathf.RoundToInt(2.5f)); //2
Debug.Log(Mathf.RoundToInt(3.5f)); //4
Debug.Log(Mathf.RoundToInt(4.5f)); //4
Debug.Log(System.Math.Round(1.5f)); //2
Debug.Log(System.Math.Round(2.5f)); //2
Debug.Log(System.Math.Round(3.5f)); //4
Debug.Log(System.Math.Round(4.5f)); //4
Debug.Log(System.Math.Round(1.5f,System.MidpointRounding.AwayFromZero)); //2
Debug.Log(System.Math.Round(2.5f,System.MidpointRounding.AwayFromZero)); //3
Debug.Log(System.Math.Round(3.5f,System.MidpointRounding.AwayFromZero)); //4
Debug.Log(System.Math.Round(4.5f,System.MidpointRounding.AwayFromZero)); //5
Debug.Log(System.Math.Round(1.5f,System.MidpointRounding.ToEven)); //2
Debug.Log(System.Math.Round(2.5f,System.MidpointRounding.ToEven)); //2
Debug.Log(System.Math.Round(3.5f,System.MidpointRounding.ToEven)); //4
Debug.Log(System.Math.Round(4.5f,System.MidpointRounding.ToEven)); //4
Unity取整函数: UnityEngine.Mathf.Round/UnityEngine.Mathf.RoundToInt 机制相同(向偶取整),如果数字结尾是 .5,从而使它处于两个整数正中间(其中一个是偶数,另一个是奇数),则返回偶数。
C#的Math取整函数,默认参数与Mathf相同,但可以通过MidpointRounding枚举参数指定规则:
MidpointRounding枚举值:(Unity中只有AwayFromZero和ToEven)
如果对.5小数有较高要求,可以使用System.Math.Round(1.5f,System.MidpointRounding.AwayFromZero);