Keil4 STC15乘法、除法、浮点型(double\float)计算结果不正确 解决办法
memset(tempxx, 0, 64);
sprintf(tempxx, "11111111,xcount=%d, test=%d\r\n", 100 /5);
//打印到串口
SendString(tempxx);
上面的程序 可能得不到你预期的结果,可能是负数 也可能是整数,也可能凑巧 就是 20。
这可能是Keil不够智能导致的,现代的IDE都能自动识别 类型,准确隐式转换,可Keil4没有。所以我们需要明确类型,强制转换。
memset(tempxx, 0, 64);
sprintf(tempxx, "11111111,xcount=%d, test=%d\r\n", (int)100/(int)5);
//打印到串口
SendString(tempxx);
---------------------------------------------------------------------------------
int计算,输出long型结果,还需要考虑int的范围,尽可能提前将int(2字节)转成long(4字节),避免溢出。
GAX = (S32)(xcount / (int)REGULATE_COUNT) * (S32)ZOOM_SCALE ;
GAY = (S32)(ycount / (int)REGULATE_COUNT)* (S32)ZOOM_SCALE ;
GAZ = (S32)(zcount / (int)REGULATE_COUNT)* (S32)ZOOM_SCALE ;
xcount\zcount\ycount均为int型,REG... ZOOM..均为#define定义的
类似的文章还有:https://blog.csdn.net/nullpointer2008/article/details/7533958
---------------------------------------------------------------------------------
另一个需要注意的是:
当不同变量 在idata和xdata进行数据计算 可能导致结果错乱!xdata 的 1+1 = idata count, 这个count不一定就会等于2,可能是其他你意想不到的数值!!!
---------------------------------------------------------------------------------