浮点数在串口打印的函数

来源:互联网 发布:sql字符串函数 upper 编辑:程序博客网 时间:2024/05/29 17:19
/********************************************************************************************************
网上的浮点数在串口打印的函数都不太完美,于是参考他们的一些算法自己写了一个比较完善的算法
可以完成包括负数和正数的浮点数转字符串的转换
****************************************************************************************************/
#include <stdio.h>
typedef unsigned char uint8;
typedef unsigned int uint32;


uint8 Float2Char(float value,uint8 *array);


void main()
{
    uint8 A[10];
    float value= -123.456789;
    uint8 i;
    Float2Char(value,A);
    printf("%s",A);
}


uint8 Float2Char(float value,uint8 *array)
{
   float DecimalPart;
   uint32 IntegerPart;
   uint8 i = 0, j = 0, temp;
   //分离整数和小数
    if(value < 0)
    {
        value = -value ;
        array[i++] = '-';
    }
    else
        array[i++] = '+';
    IntegerPart = (uint32)value;
    DecimalPart =  value - IntegerPart;
    //处理整数
    if( 0== IntegerPart)//整数部分为0
        array[i++] = '0';
    else
    {
        while(0 != IntegerPart)
        {
            array[i++ ] = IntegerPart%10 + '0';
            IntegerPart/=10;
        }
        i --;
        for(j = 1; j < (i+1)/2; j++)
            {
                temp = array[j];
                array[j] = array[i -j+1];
                array[i-j+1] = temp;
            }
        i++;
    }


    array[i++] = '.';
   //处理小数
   array[i++] = (uint32)(DecimalPart * 10)%10 + '0';
   array[i++] = (uint32)(DecimalPart * 100)%10 + '0';
   array[i++] = (uint32)(DecimalPart * 1000)%10 + '0';
   array[i++] = (uint32)(DecimalPart * 10000)%10 + '0';
   array[i]   = '\0';
   return i;
}





















0 0