搜索
查看: 1476|回复: 8
打印 上一主题 下一主题

float和int的计算结果不正确。。。求帮助呢。。。

[复制链接]
楼主
发表于 2013-11-26 15:22:44 | 显示全部楼层
对于新人,记得一句就行了

任何情况下都不要用float
除非必要,不然不要用double

如果你感兴趣,下面有简要的解释:

为什么不要用float?
现在主流平台上int 和float都用32个比特来存储,int用1个比特存储符号,float用1个比特存储符号,7个比特存储小数点的位置,所以存储实际数字的空间要比int小。
所以将float和int混用会造成精度大幅度下降。
沙发
发表于 2013-11-26 15:45:32 | 显示全部楼层
phoenixxrk 发表于 2013-11-26 15:33
懂了!但是书里说float是用来表示小数的。。。以为整数和小数要分开用不同的赋值方式。。。是int也可以用来 ...

int不可以用来表示小数

如果你必须用小数,请用double
(有些情况可以用int替代,例如人民币,可以把单位统一换成分,然后就都是整数了)

3除以2的话, 要手动加小数点才可以,不然会被当作整数除法
( 3 / 2 == 1,  3 % 2 == 1)

  1. printf("%f\n", 3.0 / 2);
复制代码
有人会告诉你用%lf输出double类型,也请记住那是不对的
板凳
发表于 2013-11-26 16:23:26 | 显示全部楼层
phoenixxrk 发表于 2013-11-26 16:13
但是书里有道题是 10.1 x(10 x 10)。。。如果不能double。。。真心不知道咋算了 哭
还有当我想计算3除 ...

10.1 x 10 x 10只能用double了

贴代码请复制文本,不要贴图,不然没办法试验你的代码

那段代码看上去输出应该是1.000000
你用了整数除法,余数直接舍掉
(c = a / b,  a==3, b==2, c == 1)
然后再转换成浮点数输出,结果还是1

正确的写法是

  1. double d = (double)a / b;
  2. printf("%d/%d=%f", a, b, d);
复制代码
所以我就说非科班的新人学什么C语言,学python哪会碰到这么多奇怪问题……
地板
发表于 2013-11-26 19:28:04 | 显示全部楼层
phoenixxrk 发表于 2013-11-26 16:35
谢谢~不是说兴趣不分科班不科班咩~还是感谢您的回答

通常C会很快扼杀掉你的兴趣,因为想把C学成一门有用的语言,要走的实在是太远太远
C是给70年代贝尔实验室的精英设计的语言;程序语言的设计,强调易学性和易用性已经是90年代的事情了

C根本不适合自学,因为C不是以某个实现为事实标准的,也就是说,你不确定某个语言上的问题,写一段程序试一试是行不通的——因为标准上有大量的未定义行为,编译器这时候生成什么代码都是有可能的;另外也不能随便去网上找答案,网上很多关于C的信息是过时的,或者是半通不通的人写的。

兴趣当然不分科班不科班,但是道路是分的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表