实数转化为字符串

来源:互联网 发布:有机玻璃 亚克力 知乎 编辑:程序博客网 时间:2024/05/21 22:39


/*
  

试编写一个函数ftoa将一个浮点数转化成为字符串

32位环境:gcc

*/



int ftoa( const double x,char buff[])
{
    if( sizeof(buff) < 4 )/*符号位+整数位+小数点+‘\0’至少四字节*/
    return -1;


    double temp = x;
    unsigned  long temp1;
    int i=1;
    int j=1;
    int len;
    char buf_tmp;


    if (temp < 0){
        buff[0]='-';
        temp=-temp;
    }
    else {
        buff[0]='+';
    }


    temp1 = (unsigned long)(temp);      //取整数部分
    temp = temp-temp1;                       //保存小数部分


    do {
        buff[i++] = (temp1%10)["0123456789"];
    }   while (temp1/=10);


    len=i-1;


    for(j = 1; j<(i+1)/2 ;j++,len--)
    {
       buf_tmp = buff[j];
       buff[j] = buff[len];
       buff[len] = buf_tmp;
    }


    buff[i++] = '.';


    do {
        temp *= 10.0;
        buff[i++] = ( (unsigned long long)temp %10 )["0123456789"];     // 再没有限定小数位数的情况下系统做近似处理可能产生很长的小数位
    }   while((unsigned long long )temp%10);                                         // 更多的小数位将变成近似值,此处可以设置为其他限定小数位数的条件。


    buff[i-1]='\0';


    return 0;
}

0 0
原创粉丝点击