调用sprintf函数将实数打印到字符串及手动实现实数转字符串函数 ------ ftoa
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<stdlib.h> 4 5 char *ftoa(double db, char *str);// 手动实现将实数转化为字符串 6 7 // 实数转字符串 8 void main() 9 { 10 double db = -12345.875; 11 char str[200]; 12 sprintf(str,"%f",db);// sprintf 将实数打印到字符串 13 printf("%s\n",str); 14 15 ftoa(db, str); 16 printf("%s\n", str); 17 system("pause"); 18 } 19 20 // 手动实现将实数转化为字符串 21 char * ftoa(double db, char *str) 22 { 23 char *istr = str;//备份首地址 24 if (db < 0) 25 { 26 *str = '-';//是负数 27 db *= -1;///负数转化为正数 28 str++;//指针向前移动 29 } 30 31 //12345 . 456 32 //-12345 33 int num = (int)db;//取出整数 34 int wei = 0; 35 for (int inum = num; inum; inum /= 10) 36 { 37 wei++;//取出位数 38 } 39 //12345 40 //5 41 //1234 %10 4 42 for (int i = wei - 1; i >= 0; i--, num /= 10)//填充了整数位 43 { 44 str[i] = num % 10 + '0'; 45 46 } 47 str += wei; 48 *str = '.';//处理小数点 49 //str[wei] = '\0'; 50 51 double xiaoshu = db - (int)db;//取出小数 52 int xiaoshuwei = 0; 53 //0.123 1.23 1 12.3 12 123 123 54 //取出小数位 55 //ixiaoshu != (int)ixiaoshu精确描述 56 57 for (double ixiaoshu = xiaoshu; ixiaoshu != (int)ixiaoshu; ixiaoshu *= 10) 58 { 59 //printf("\n%f", ixiaoshu - (int)ixiaoshu); 60 61 xiaoshuwei++; 62 if (xiaoshuwei>6) 63 { 64 break;//限定精确度 65 } 66 } 67 //.123 1.23 -1 0.23 68 for (int i = 0; i < xiaoshuwei; i++) 69 { 70 xiaoshu *= 10;//1.23 2.3 3 71 int data = (int)xiaoshu;//1 2 3 72 //printf("\n%d", data); 73 xiaoshu -= data;//0.23 0.3 0 74 str++; 75 *str = data + '0';//指针向前移动 76 } 77 *(++str) = '\0'; 78 return istr; 79 }
长风破浪会有时,直挂云帆济沧海
posted on 2015-05-13 16:43 Dragon-wuxl 阅读(637) 评论(0) 收藏 举报
浙公网安备 33010602011771号