现在的位置: 首页 > 综合 > 正文

ftoa的简单实现

2018年05月28日 ⁄ 综合 ⁄ 共 1380字 ⁄ 字号 评论关闭

转载自csdn

http://blog.csdn.net/zhangleiyigeren/article/details/6308168

收藏了,自己学习一下

[cpp] view plaincopyprint?
01.#include <stdio.h>   
02.#include <memory.h>   
03.#include <malloc.h>   
04.#include <math.h>   
05.#include <string.h>   
06.char* my_itoa(int value,char *str,int radix)  
07.{  
08.    int sign = 0;  
09.    //char *s = str;   
10.    char ps[32];  
11.    memset(ps,0,32);  
12.    int i=0;  
13.    if(value < 0)  
14.    {  
15.        sign = -1;  
16.        value = -value;  
17.    }  
18.    do  
19.    {  
20.        if(value%radix>9)  
21.            ps[i] = value%radix +'0'+7;  
22.        else   
23.            ps[i] = value%radix +'0';  
24.        i++;  
25.    }while((value/=radix)>0);  
26.    if(sign<0)  
27.        ps[i] = '-';  
28.    else  
29.        i--;  
30.    for(int j=i;j>=0;j--)  
31.    {  
32.        str[i-j] = ps[j];  
33.    }  
34.    return str;  
35.}  
36.char *my_ftoa(double number,int ndigit,char *buf)  
37.{  
38.    long int_part;  
39.    double float_part;  
40.    char str_int[32];  
41.    char str_float[32];  
42.    memset(str_int,0,32);  
43.    memset(str_float,0,32);  
44.    int_part = (long)number;  
45.    float_part = number - int_part;  
46.    // 整数部分处理   
47.    my_itoa(int_part,str_int,10);  
48.    // 小数部分处理   
49.    if(ndigit>0)  
50.    {  
51.        float_part =fabs( pow(10,ndigit)*float_part);  
52.        my_itoa((long)float_part,str_float,10);  
53.    }  
54.    int i = strlen(str_int);  
55.    str_int[i] = '.';  
56.    strcat(str_int,str_float);  
57.    strcpy(buf,str_int);  
58.    return buf;  
59.}  
60.int main()  
61.{  
62.    double a=-32443.35555;  
63.    char str[32];  
64.    memset(str,0,32);  
65.    printf("%s",my_ftoa(a,6,str));  
66.    printf("/n");  
67.    return 0;  
68.}  

程序的不足就是很多情况下ndigit是未知的,小数位数也不确定,这个时候就不好处理但是可以计算出ndigit的大小

int ndigit = 0;
while(float_part != (long)(float_part))
{
      float_part *= 10;
      ndigit ++;
}

抱歉!评论已关闭.