打印

求助:浮点数问题

[复制链接]
2391|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuanyx99|  楼主 | 2012-1-6 09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个设备给我发来一个用6个字节表示的浮点数,我需要把这个数用LCD显示出来,也就是说要把这个浮点数转换成字符串,请问怎么做,具体如下:

浮点数:32位,4个字节,依次为PSMHMMML,用FFloat)表示;
   其中:单精度二进制浮点数为:FloatData = ±0.MH-MM-ML*2P
   P 为阶码,1个字节,以十六进制补码的形式表示;
   SMH 为尾数的高字节,1个字节,最高位(第7位)为符号位SS=1 表示数据为负,
        S=0 则数据为正;其余7位为浮点数尾数的高7位,第06位;
   MM 为尾数的中间字节,1个字节,第714位;;
   MM 为尾数的低字节,1个字节,第1523位;;

累积量采用6个字节的浮点数表示:依次为PSMHMMMLML1ML2,用FFloat)表示; FloatData = ±0.MH-MM-ML-ML1-ML2*2P

这是一个流量计通讯协议里面的一部分,整文在这:
http://wenku.baidu.com/view/40d037ccda38376baf1faeb4.html

相关帖子

沙发
anazel| | 2012-1-6 11:02 | 只看该作者
乘以1000000,然后再转成整型显示可以吗

使用特权

评论回复
板凳
liang7143| | 2012-1-6 12:43 | 只看该作者
库函数 sprintf

使用特权

评论回复
地板
wh6ic| | 2012-1-6 13:58 | 只看该作者
若干办法:
  A、把这个六字节的非标浮点数略掉后两字节精度当单精度浮点处理--如果是C51的话其直接支持单精度浮点的各种操作,单精度浮点有7位有效位数,一般的仪表显示够用了。
  B、添加一个全零指数字节和一个全零尾数字节,当双精度浮点数操作--需要你的编译系统支持,标准双精度格式有可能需要移位处理。
  C、自己按此非标浮点格式制作合适的显示函数。

BTW:此非标格式出现,有极大可能其格式还有其他非标现象,处理时注意规避。比如常见的左规不全、指数符号位非标(甚至尾数符号非标)。要细啃它的协议及说明。还有就是它很可能含有Bug。

使用特权

评论回复
5
yuanyx99|  楼主 | 2012-1-6 15:16 | 只看该作者
4# wh6ic

首先谢谢你的回答  这个数不能省略的,必须全部显示出来,而且这个协议已经用很久了 肯定是没有问题的  我现在想的把它存到一个双精度浮点数里面 但是有个问题不知如何解决,我看资料说51存浮点数的格式是float=±1.M*2^P,但是这个数是float=±0.M*2^P,这个怎么处理呢?

使用特权

评论回复
6
Wayner| | 2012-1-6 16:28 | 只看该作者
你要计算转换了

使用特权

评论回复
7
wh6ic| | 2012-1-9 17:34 | 只看该作者
标准单精度浮点数的 ±1.M*2^P 中1是隐含的,固定在尾数符号位上,也就是除零外所有合法数据的尾数是24Bit且最高位为1. 你要用的扩展浮点协议中是否有这点?如果有并且双精度格式中指数仍为一个字节,就简单左移一位,同时指数减1,并且扩展两字节0尾数(指数不变),变成双精度数来处理(假定你的编译器支持,否则需要自己做); 如果没有规定尾数最高位一定为1,就需要做左规处理。没做过的仔细看下相关的浮点数协议,多编程试下也可以做出来。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

29

帖子

0

粉丝