发一个浮点数转字符串的函数(用于给单片机1602显示)

2020-01-27 11:21发布

本帖最后由 huangxinji8 于 2012-10-10 23:48 编辑

自己写的,我也是刚学习程序,还是一个菜鸟,故把自己写的程序发出来,欢迎各位大侠指出哪里写的不好的

程序如下:

/**********************************************************
*函数名:  void float32_to_str(float Num, UINT8 n, UINT8 u8Char[])
*功能:    把一个单精度浮点数转化为字符串
*入口参数:float Num, UINT8 n, UINT8 u8Char[]
*返回参数:无
*说明:    Num:预转化的数据;u8Char[]:用于储存转化后的字符串
*               n: 精确到小数点多少位  
***********************************************************/
void float32_to_str(float Num, UINT8 n, UINT8 u8Char[])
{
        UINT8  u8_digit        = 0;                                                     //数据的位数
        UINT8  i                  = 0;
        UINT32 int32_temp  = 0;
        float  f32_temp        = 0.0;

        f32_temp = Num < 0 ? (-Num) : (Num);                         //取出NUM的绝对值存于f32_temp中                                                       
       
        for (i=0; i<n; i++)                                         //将要显示的内容化为整数
        {
                f32_temp *= 10.0;                                         //将浮点数扩大10的n次方倍
        }

        int32_temp = (UINT32)f32_temp;                                 //将扩大后的浮点数转成长整型存于int32_temp中

        printf_char(1, 10, int32_temp + '0');

        /*把浮点数从低位开始转化为字符串*/
        i = 0;
        u8_digit = 0;                               
        do{       
                if ((n != 0) && (i == n))                          //存入小数点
                {
                        u8Char = '.';       
                }
                else
                {
                        u8Char = '0' + int32_temp % 10;         //从最低位储存
                        int32_temp = int32_temp / 10;
                }

                u8_digit++;                                  //计算数据位数即字符串的长度       
                i++;                                                            
        }while (int32_temp != 0);
       
        /*对绝对值小于1的数进行补零*/
        if ((Num > -1.0) && (Num < 1.0))
        {
                for (i=0; i<(n-u8_digit); i++)
                {
                        u8Char[u8_digit + i] = '0';       
                }

                u8Char[u8_digit + i] = '.';                          //补零和小数点(0.)
                u8Char[u8_digit + i + 1] = '0';
               
                u8_digit += 2 + n - u8_digit;
        }

        /*加上符号位*/
        if(Num < 0)
        {
                u8Char[u8_digit] = '-';                                  //在字符串末尾加上负号标志
                u8_digit++;                                  //字符串长度加1
        }
       
        /*把u8Char中的字符串高低位对调*/
        for (i=0; i < (u8_digit / 2); i++)
        {
                UINT8 u8_temp;                                  //中介
                u8_temp = u8Char;
                u8Char = u8Char[u8_digit - i - 1];
                u8Char[u8_digit - i - 1] = u8_temp;        
        }
       
        u8Char[u8_digit] = '';                                    //字符串结尾补充一个''                       
}




*注:程序中的 UINT8    为 unsigned char 类型
              UINT32  为 unsigned long 类型
         
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
bigallium
1楼-- · 2020-01-27 13:55
我以前试图写,直到听说有个函数叫sprintf().....
huangxinji8
2楼-- · 2020-01-27 19:01
bigallium 发表于 2012-10-10 23:51
我以前试图写,直到听说有个函数叫sprintf().....

哦,这么神奇,在kiel里可以用吗?
bigallium
3楼-- · 2020-01-27 23:05
 精彩回答 2  元偷偷看……
3050311118
4楼-- · 2020-01-28 05:02
huangxinji8 发表于 2012-10-10 23:57
哦,这么神奇,在kiel里可以用吗?

可以用                  
huangxinji8
5楼-- · 2020-01-28 08:09
3050311118 发表于 2012-10-11 00:00
可以用

那我不白花这么多时间写了
as9901
6楼-- · 2020-01-28 13:10
你的程序应该比那个小点

一周热门 更多>