免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1703 | 回复: 3
打印 上一主题 下一主题

关于atof() [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-02 10:41 |只看该作者 |倒序浏览
想把字符串转成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>,为什么不引也能编译通过?

论坛徽章:
0
2 [报告]
发表于 2009-11-02 12:43 |只看该作者
C语言的问题,未定义的函数默认返回int,然后把这个返回的int再强制类型转换成double,
但实际返回的是double,就出错了。

c++中函数类型要求高些,未定义函数就直接出错。这样比较好一些。

论坛徽章:
0
3 [报告]
发表于 2009-11-02 17:08 |只看该作者

回复 #2 drangon 的帖子

但是为什么转成int会变成那么大的值?
我直接打印了printf("%d",atof(str))的值是1078401433.

论坛徽章:
0
4 [报告]
发表于 2009-11-02 19:21 |只看该作者

回复 #3 watanuo 的帖子

自己看看计算机组成原理。

浮点数的表示于整数不同,它分数值,阶符,阶码三部分组成。在8字节(32位机)的空间里来表示整个浮点数。
它转化为整数之后,其意义发生变化,就会变成一个很奇怪的数字了。

大致情况如些,具体浮点数怎么表示的,我记不太清了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP