转载自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 ++;
}