char * convert_float_to_chars(double f, char * buf, int precision){    char * ptr = buf;    char * p = ptr;    char * p1;    char c;    long intPart;    char* temp_str;    // sign stuff    if (f    {        f = -f;        *ptr++ = '-';    }    f += (double)0.005;    intPart = (long)f;    f -= intPart;    if (!intPart)        *ptr++ = '0';    else     {        // save start pointer        p = ptr;        // convert (reverse order)        while (intPart)         {            *p++ = '0' + intPart % 10;            intPart /= 10;        }        // save end pos        p1 = p;        // reverse result        while (p > ptr)         {            c = *--p;            *p = *ptr;            *ptr++ = c;        }        // restore end pos        ptr = p1;    }    // decimal part    if (precision)     {        // place decimal point        *ptr++ = '.';        // convert        while (precision--)         {            f *= (double)10.0;            c = (char)f;            *ptr++ = '0' + c;            f -= c;        }    }    // terminating zero    *ptr = 0;    temp_str = --ptr;    while(*temp_str != '.')     {        if(*temp_str == '0')         {            *temp_str = '\0';        }        else         {            break;        }        temp_str--;    }    if((*(temp_str+1) == '\0') && (*temp_str == '.'))     {        *(temp_str+1) = '0';    }    return buf;}int convert_double_to_chars(char* des, double num, int precision){    int temp = 0;    int index = 0;    int val_int = 0;    int tt_temp = 0, factor = 1;    int working_index = 0;    int flag = 0;    double t1 = 0.001, gap = 0.00001;    if(0.00001 > num)    {        flag = 1;        num = num * (-1);    }    t1 = num;    temp = (int)t1;    while(temp > 0)    {        tt_temp = temp % 10;        des[index] = '0' + tt_temp;        ++index;        val_int += tt_temp * factor;        temp = temp / 10;        factor *= 10;    }    if(1    {        --index;    }    // reverse    for(working_index = 0; working_index    {        temp = des[working_index];        des[working_index] = des[index - working_index];        des[index - working_index] = temp;    }        des[++index] = '.';    ++index;        gap = t1 - val_int;    temp = 2;    factor = 10;    while(temp > 0)    {        val_int = (int)(gap * factor);        des[index] = '0' + val_int;        ++index;        gap = gap - val_int*1.0/10;        factor *= 10;        --temp;    }    if(1 == flag)    {        for(temp = index - 1; temp >= 0; --temp)        {            des[temp + 1] = des[temp];        }        des[0] = '-';    }    return (index + 1);}void convert_chars_to_double(char *str, int *length, double *ret_val){    char *temp_str = str;    char working_char = '\0';    int factor = 1, dot_flag = 1, negative_flag = 0, len = 0;    double val = 0.000001, va_small = 0.000001, factor_size = 10.0, small_size = 1.0;    len = 0;    if(NULL != temp_str)    {        working_char = *temp_str;        if('-' == *temp_str)        {            negative_flag = 1;            ++temp_str;            ++len;        }    }    else    {        return;    }    while('\0' != *temp_str)    {        working_char = *temp_str;        if( ('0'= working_char) )        {            val *= factor_size;            val += working_char - '0';        }        if('.' == working_char)        {            dot_flag = 1;            factor_size = 0.10;            break;        }        ++temp_str;        ++len;    }    if(1 == dot_flag)    {        ++temp_str;        ++len;        while('\0' != *temp_str)        {            working_char = *temp_str;            if( ('0'= working_char) )            {                small_size *= factor_size;                va_small += (working_char - '0') * small_size;            }            ++temp_str;            ++len;         }         val += va_small;    }    if(1 == negative_flag)    {        val *= -1.00000;    }    *length = len;    *ret_val = val;    return;}
12-23 21:07