C语言中如何将double型数据转换为数组?

我需要double型数据的每一位数字(包括小数)。听说将数据转换为字符串就能够做到

思路是:
先将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');

以上就是我的算法,请高手看了不要笑话,希望能给楼主带来启发。
温馨提示:答案为网友推荐,仅供参考
第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');

以上就是我的算法,请高手看了不要笑话,希望能给楼主带来启发。
^_^本回答被网友采纳