第1个回答 2007-02-25
楼上的思路基本正确。但事实上VC++中已经有集成该运算的函数。分别是atof 和_pcvt.
#include <string.h>
1、atof()
该函数将数字字符串转化为浮点型数值。原型如下:
double atof(const char *)
const char *是要转化的数字字串,返回的值为浮点数值。
2、_gcvt()
该函数跟atof()正好相反,用来把数值转化为数字字符串。原型如下:
char *_gcvt(double,int ,char*)
参数意义如下:
double:被转换数据。
int:数字字符串长度。(通常可以是char*长度。)
char*:转换后的数字字符串。
例:
我们要把3.14换成字符串。
#include <string.h>
char a[5]; /*注意:内存空间要比3.14的数位大*/
_gcvt(3.14,4,a);
那么在a里面,a[1]='3',a[2]='.',a[3]='1',a[4]='4' ,a[5]='\0';
这就是你想要的结果。
但是在char[]里面存储的是字符而不是数字。
如: '0'这个字符不等于0,而是48。‘1’是49。。
也就是每个字符-48就可得其值。
剩余的转化过程就请你自己编写。非常简单。
第2个回答 2007-02-24
思路是:
先将Double型的数字整数部分变为整型数字一一取到数组中去(用循环整除可以做到,比如double i=123.456,就可以先把整数部分用j=(int)i强制类型转换取出放入整型变量j中,再依次取到数组a中
(a[k++]=i%10;i/=10;)
这两句语句就可以做到(不过数字是倒序的,最后输出时要注意)。
再看小数部分,同理,但不用除法,而用乘法,先去除整数部分
(j=j-(int)j;)
再将小数部分不断的乘10取整,取一位去除一位,存入另一数组:
l=(int)(j*10);
b[k++]=l;
j=j*10-l;...直到j*10==0为止
这样就可以把j中的数按位取到了两个数组中,接下去只要将两数组合并到C数组中去,或者依次输出整数部分和小数部分,中间别忘加小数点,输出成字符在C语言里可以这样:
printf("%c",a[i]+'0');
printf(".");
printf("%c",b[i]+'0');
以上就是我的算法,请高手看了不要笑话,希望能给楼主带来启发。
^_^本回答被网友采纳