鱼C论坛

 找回密码
 立即注册
查看: 3675|回复: 18

有个小问题问一下

[复制链接]
发表于 2013-8-1 10:52:11 | 显示全部楼层 |阅读模式
1鱼币
为什么printf("%f\n",3/2);最后的结果为0.00000啊

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-1 10:59:38 | 显示全部楼层
因为你的代码写错了 结果当然也是错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-1 11:03:15 | 显示全部楼层
额,3.0/2.0就是1.5了。坐等楼下大师讲解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-1 12:03:41 | 显示全部楼层
本帖最后由 编程难 于 2013-8-1 12:07 编辑

这个帖子之前有类似的了。3/2会被当做 整数/整数,结果也是整数。 得到的是商1 余 1。所以结果不是1.50000.

你把其中一个换乘float型的,结果就是float型的了。就能得到正确的结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-1 12:16:28 | 显示全部楼层

那这样说3/2得到的结果是整型的1,  那么 整型1 转化为浮点型  就成了0.0000吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-1 12:17:02 | 显示全部楼层
我是师兄 发表于 2013-8-1 10:59
因为你的代码写错了 结果当然也是错的

可这就是个题目呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-1 12:39:01 | 显示全部楼层
luomengkang 发表于 2013-8-1 12:16
那这样说3/2得到的结果是整型的1,  那么 整型1 转化为浮点型  就成了0.0000吗

这里有个问题,就是printf的时候不会采取默认类型转换的,只是把结果1所在的四字节(float占四字节)的内存单元的内容当做一个浮点数进行输出。所以结果就成了0了。这个又涉及到浮点数的存储问题。可以看看小甲鱼的视频,或者自己搜一下。

ps:如果调试能力够的话,可以看下printf的执行过程。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-1 13:09:27 | 显示全部楼层
luomengkang 发表于 2013-8-1 12:17
可这就是个题目呀

题目是错的 在天朝是很正常的事情 题目涉及未定义行为 结果不确定 没答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-1 15:35:03 | 显示全部楼层
3和2都为int型,则以%d打印为1,而你要求以浮点型打印则出错了。你只需将3与2改为3.0和2.0就对了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-2 21:52:38 | 显示全部楼层
浮点数和整数在内存中的存放方式是不同的,所以整型的1和浮点型的1是不一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-3 01:02:18 | 显示全部楼层
3/2默认形式输出是int整数型。而你用long float输出是不对的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-4 11:45:46 | 显示全部楼层
因为,输出运算不能这样计算。你的输出没有数值,故是零,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-15 14:02:49 | 显示全部楼层
printf("%f\n",3./2);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-25 19:46:31 | 显示全部楼层
printf("%lf,double(3/2));就可以出现你想要的结果,这个好像跟整形和实型的内存分布有关,好像吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-25 22:15:29 | 显示全部楼层
printf从第二个参数开始必须是变量,不能用常量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-19 17:07:50 | 显示全部楼层
printf("%f\n",3.0/2.0);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-19 19:32:11 | 显示全部楼层
默认 3/2 是int类型,要强制转换类型才行

printf("%f\n", (float) 3/2);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-19 20:47:40 | 显示全部楼层
什么情况   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-20 09:22:11 | 显示全部楼层
3/2=0.666666..
取的是整数,故得数取整数,so
3/2=0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 08:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表