鱼C论坛

 找回密码
 立即注册
查看: 3246|回复: 5

1.0/3*3,1/3*3和3/2的疑惑

[复制链接]
发表于 2011-10-19 19:59:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>

  2. void main()
  3. {
  4. printf("%f\n", 1.0/3*3);
  5. printf("%f\n", 3/2);
  6. printf("%f\n", 1/3*3);
  7. }
复制代码
运行的结果是。
1.000000
0.000000
0.000000

各位,我不明白它们之间的区别。
为什么3/2不是1.5?
1.0/3*3和1/3*3输出为什么不一样?

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-19 20:07:53 | 显示全部楼层
本帖最后由 菜得要自杀 于 2011-10-19 20:08 编辑

C++不懂。

就JAVA来说....

1.0/3会变自动转换成最大的数据类型,即Double所以变成0.333333再乘以3,自然就是1(计算机数学是离散的)

而1/3是两个int类型,所以值是0 ,0X3也是0

3/2自然是1了,两个整数嘛。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-10-19 20:13:33 | 显示全部楼层
本帖最后由 inside 于 2011-10-19 20:17 编辑

有些清楚了,但3/2,两个整形,整形输出是1,为什么double是0?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-19 20:19:01 | 显示全部楼层
你需要在计算机前,先将他们转换成DOUBLE。

不然的话,也就是3/2为1,你把1转换成float或者double,还是1
你如果提前指定他们为小数,他们计算的结果也是小数了。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-10-19 20:30:57 | 显示全部楼层
谢谢,总算弄明白了。
3/2=1,1是int型,1不可以用float输出,沒有小数点,不合法
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-21 01:06:07 | 显示全部楼层
这样也行
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-8 23:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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