浮点型转Int型出现正负符号丢失

hongshamodeyu 2016-12-28 10:58:39
将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编译环境,硬件单片机




...全文
553 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
GKatHere 2016-12-28
  • 打赏
  • 举报
回复
不会

int main()
{
	float magRealData1[] ={-0.248047f};
	int sigFlag;
	if(magRealData1[0]>=0)
	{
		sigFlag=1;
	}
	else
	{
		sigFlag=-1;
	}        
	int  tempValueX1=(int)(1000*fabs(magRealData1[0]));
	int  tempValueX2=sigFlag*tempValueX1;     
	int  magX =tempValueX2;

	return 1;
}


3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧