关于32位浮点数转整形的相关知识可以参考这篇博客:https://blog.csdn.net/u011575671/article/details/74518933
用Modbus读PLC的浮点数寄存器的时候读取的内容为IEEE 754标准的32位寄存器,需要转换一下,可以根据自己的需求转换,直接贴代码:
//============================================================
//函数名称 :Float32
//函数功能 :将32位的float转换为10进制正数(0~99999)舍弃小数,IEEE 754标准
//输入变量 :NumFloat32:待转换32位浮点数
//返 回 值 :计算结果 无符号整形 u32 ,返回-1为负数或者超限;
//调试记录 :
//============================================================
unsigned int Float32(const unsigned int NumFloat32)
{
unsigned char sbit,ebits;
unsigned int mbits,result;
sbit = NumFloat32 >> 31;
ebits = ( NumFloat32 >> 23 ) & 0xff ;
mbits = NumFloat32 & 0x7fffff ;
if(sbit) //若需要负数部分,sbit为1时,result*-1,去掉判断;
{
return -1 ;
}
ebits -= 127; //得到阶码<0,即结果小于1,返回0;
if(ebits < 0)
{
return 0;
}
result = (1 << ebits) +(mbits >> (23 - ebits));
/*若有小数位数精度要求,mbits的0~(23 - ebits)位可以适当保留处理;可以进行自定义处理
result = (1 << ebits) +(mbits >> (23 - ebits)); 改为 result = (1 << (ebits + 10))* 1000 / 1024 + (mbits >> (13 - ebits)) * 1000 / 1024 ;
结果扩大了1000倍,result/1000为整数部分,result%1000为小数*/
if(result > 99999)
{
return -1 ;
}
printf("result = %d\n",result);
return result;
}
转载自原文链接, 如需删除请联系管理员。
原文链接:IEEE 754标准 32位浮点数(float)转十进制 C语言,转载请注明来源!