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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-11-26 15:07:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
本帖最后由 phoenixxrk 于 2013-11-26 15:09 编辑

如图所示。。。为什么最后算出来结尾有个61?

沙发
发表于 2013-11-26 15:22:44 | 只看该作者
对于新人,记得一句就行了

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

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

为什么不要用float?
现在主流平台上int 和float都用32个比特来存储,int用1个比特存储符号,float用1个比特存储符号,7个比特存储小数点的位置,所以存储实际数字的空间要比int小。
所以将float和int混用会造成精度大幅度下降。
板凳
 楼主| 发表于 2013-11-26 15:33:16 | 只看该作者
rosynirvana 发表于 2013-11-26 15:22
对于新人,记得一句就行了

任何情况下都不要用float

懂了!但是书里说float是用来表示小数的。。。以为整数和小数要分开用不同的赋值方式。。。是int也可以用来表示小数吗?
还有一个就是 如果算3除以2 等于1.5 那么输出数值的时候要换用%f吗?
各种求解!谢谢您呢!~
地板
发表于 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类型,也请记住那是不对的
5#
 楼主| 发表于 2013-11-26 16:13:57 | 只看该作者
rosynirvana 发表于 2013-11-26 15:45
int不可以用来表示小数

如果你必须用小数,请用double

但是书里有道题是 10.1 x(10 x 10)。。。如果不能double。。。真心不知道咋算了 哭
还有当我想计算3除以2的时候 这样写语言为什么算出来3除以2得到0.00?
已经努力在尝试。。。呜呜呜
6#
发表于 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哪会碰到这么多奇怪问题……
7#
 楼主| 发表于 2013-11-26 16:35:24 | 只看该作者
rosynirvana 发表于 2013-11-26 16:23
10.1 x 10 x 10只能用double了

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

谢谢~不是说兴趣不分科班不科班咩~还是感谢您的回答
8#
发表于 2013-11-26 19:28:04 | 只看该作者
phoenixxrk 发表于 2013-11-26 16:35
谢谢~不是说兴趣不分科班不科班咩~还是感谢您的回答

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

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

兴趣当然不分科班不科班,但是道路是分的
9#
 楼主| 发表于 2013-11-27 15:54:31 | 只看该作者
rosynirvana 发表于 2013-11-26 19:28
通常C会很快扼杀掉你的兴趣,因为想把C学成一门有用的语言,要走的实在是太远太远
C是给70年代贝尔实验室 ...

(捂脸)
很多人像我一样只是想体会一下c语言的乐趣
也许我们只能在岸边打转
但是我们也没想成为达人或者高手
啊哈c这本书还有这个论坛都是为了这个普及型的目的存在
我想 应该没有不是科班出身就不能接触  难就不能自学 的道理吧
非常感谢您的回答 您很耐心 也很懂
但是我个人看来 任何人 对任何正当学科有兴趣 都值得得到鼓励 !
谢谢您看到这里

点评

给力,这通话说的很不错~  发表于 2013-12-2 17:28
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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