打印

PIC 浮点数

[复制链接]
2242|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nxmhp|  楼主 | 2013-2-3 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我以前没用过PIC,最近用,发现浮点数是三字节的!怎么能调成四个字节,因为要和上位机通讯,三个字节不好搞协议
沙发
谈的元| | 2013-2-4 00:57 | 只看该作者
自己加一个字节就行啊,说说怎么不好搞协议了

使用特权

评论回复
板凳
2287779862| | 2013-2-27 14:16 | 只看该作者
// 函数名称:DoubleToStr
// 前置函数:无
// 函数功能:把double类型的数据转换成字符串
// 参数:
//     【Input】val,float的小数有6位有效位数,
//                   double的小数有12位有效位数
//     【Input】ipart,[0,9]
//     【Input】fpart,[0,...)
//     【Output】str,字符串空间大小要大于等于1+(ipart+1)+1+fpart+1
// 返回:str
// 使用时注意事项:
//     1.没有对参数进行合法型的判断
//     2.str不能等于NULL,str的空间不能小于1+(ipart+1)+1+fpart+1
//     3.ipart与val的取值范围
//     4.例如val=123.456,则ipart要大于等于2
// 时间:
// 公司:
// 其他:
char *DoubleToStr( char *str, double val, unsigned char ipart/*int part*/, unsigned char fpart/*float part*/ )
{
        // str != NULL
        // 使用截断法,没有采用四舍五入
        // ipart为val要保留整数的位数,ipart[0,9]
        // fpart为val要保留小数的位数,fpart[0,...)
        // 因此str字符串的空间要大于ipart+fpart+3
        // 一个符号字符
        // 一个小数点字符
        // 一个字符串结束字符
        char *st = str;
        int i = 0;
        long tmp = 1;
        long tmpVal = val;
        for ( i = 0; i < ipart; i++ )
        {
                tmp *= 10;
        }
        if ( tmpVal < 0 )
        {
                *str = '-';
                val = -val;
                tmpVal = - tmpVal;
        }
        else
                *str = '+';
        if ( tmpVal / tmp >= 10 )
                *str = 'E';
        str++;
        while ( tmp )
        {
                *(str++) = (tmpVal / tmp) % 10 + '0';
                tmp /= 10;
        }
        *(str++) = '.';
        val -= tmpVal;
        i = 0;
        while ( i++ < fpart )
        {
                val *= 10;
                tmpVal = val;
                *(str++) = tmpVal + '0';
                val -= tmpVal;
        }
        *str = '\0';
        return st;
}

使用特权

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

本版积分规则

1

主题

8

帖子

2

粉丝