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