Chinaunix
标题:
关于atof()
[打印本页]
作者:
watanuo
时间:
2009-11-02 10:41
标题:
关于atof()
想把字符串转成double,程序如下。
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
double f;
char *str = "46.2";
f = atof(str);
printf("string = %s float = %.1f\n", str, f);
return 0;
}
如果把#include <stdlib.h>删掉,结果很诧异:
string = 46.2 float = 1078401433.0
加上,结果为:
string = 46.2 float = 46.2
查了下手册,atof需要引入#include <stdlib.h>,为什么不引也能编译通过?
作者:
drangon
时间:
2009-11-02 12:43
C语言的问题,未定义的函数默认返回int,然后把这个返回的int再强制类型转换成double,
但实际返回的是double,就出错了。
c++中函数类型要求高些,未定义函数就直接出错。这样比较好一些。
作者:
watanuo
时间:
2009-11-02 17:08
标题:
回复 #2 drangon 的帖子
但是为什么转成int会变成那么大的值?
我直接打印了printf("%d",atof(str))的值是1078401433.
作者:
foolishx
时间:
2009-11-02 19:21
标题:
回复 #3 watanuo 的帖子
自己看看计算机组成原理。
浮点数的表示于整数不同,它分数值,阶符,阶码三部分组成。在8字节(32位机)的空间里来表示整个浮点数。
它转化为整数之后,其意义发生变化,就会变成一个很奇怪的数字了。
大致情况如些,具体浮点数怎么表示的,我记不太清了。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2