浮点型转Int型出现正负符号丢失
将float数据赋值给int16时发现偶尔float值的符号丢 了,例如当magRealData1[0]值位-0.24805时,magX得到的值是248:
magInputHIDReport[hidReportId-accNum-gyrNum-1].magX =(int16_t)(magRealData1[0]*1000);
magInputHIDReport[hidReportId-accNum-gyrNum-1].magY =(int16_t)(magRealData1[1]*1000);
改成这样:
if(magRealData1[0]>=0)
{
sigFlag=1;
}
else
{
sigFlag=-1;
}
tempValueX1=(int32_t)(1000*fabs(magRealData1[0]));
tempValueX2=sigFlag*tempValueX1;
magInputHIDReport[hidReportId-accNum-gyrNum-1].magX =tempValueX2;
结果打印的时候(magRealData1[0]-->X,tempValue1->x1,tempValu2-->x2),最后一个转换错了:
Num=1450 X -0.246582 -246 x1=246 x2=-246
Num=1470 X -0.24707 -247 x1=247 x2=-247
Num=1480 X -0.246582 -246 x1=246 x2=-246
Num=1490 X -0.24707 -246 x1=246 x2=-246
Num=1500 X -0.248047 248 x1=248 x2=248
关键是偶尔丢失符号了,有遇到过这种情况的吗?求解
IAR编译环境,硬件单片机