一、示例代码
1、问题
下段代码结果是1
int currentLevel = (int)((1 - 0.8f) * 10); //猜猜得到的结果是什么?
Debug.Log("currentLevel:" + currentLevel);
下端代码打印结果是2
float currentLevel = (1 - 0.8f) * 10;
Debug.Log("currentLevel:" + currentLevel); //这里得到结果2,但是上面强转又变成1了
2、原因
得到的是无限接近于2的一个数(0.19)
而强转是舍尾取整=》将小数位抹干净
//得到的结果是1.9999999999999996
float result = (1 - 0.8f) * 10;
为什么打印是2
因为debug会保留小数点后六位,将第七位四舍五入到第六位
(1)案例
3、解决方法
使用函数库自带的函数
//返回最接近该小数的整数
int currentLevel = Mathf.RoundToInt((1 - 0.8f) * 10);
二、重点
战斗计算或者浮点数的计算时,一定不要使用==来判断,自己封装一个函数来判断相等。