A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wkop 中级黑马   /  2015-11-13 11:01  /  2379 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include <stdio.h>
int main(int argc, const char * argv[]) {
    float score=0.0f;
    printf("请输入分数:");
    scanf("%f",&score);
    printf("你输入的分数是:%f\n",score);
    return 0;
我输入23.3,打印出来为什么是23.299999
float单精度类型有效数字为7位,小数点后精度为6位,这样打印出来应该是23.3啊?
}

19 个回复

倒序浏览
printf("你输入的分数是:%f\n",score);改成 printf("你输入的分数是:%.2f\n",score);
回复 使用道具 举报
不限定小数点位数,是默认显示6位显示的,你输入的,23.3,输出23.299999,多出的五位算是垃圾数了
回复 使用道具 举报
可以使用%.nf控制显示位数,n是几,打印出来就是几位小数。
回复 使用道具 举报
学习了 谢谢分享
回复 使用道具 举报
过来看看  
回复 使用道具 举报
不指定域宽,浮点数默认打印6位。对于计算机,23.299999=23.0,所以并不算是垃圾数吧
回复 使用道具 举报
因为float单精度的类型默认就是6位,如果想要限制位数,可以看这个帖子:http://bbs.itheima.com/forum.php ... p;page=1#pid2046076
回复 使用道具 举报
刚才不小心发出去了,因为浮点数在内存中和int或者char存储的机制不一样的,比如说int和char在内存中都是以补码的形式存储的,而浮点数是采用移码的形式存储的,这种存储方式就造成了浮点数容易丢失精度的特点。也就是说浮点数不能进行判等运算,比如 float a = 8.0 / 7; if (a*7 == 8)这个是不成立的。你可以自己试下,一般如果判等的话都是用:比如判断浮点数是否为零:if (a < 0.000001 && a > -0.000001) 这样来写。
回复 使用道具 举报
blazehot18 来自手机 中级黑马 2015-11-20 00:23:04
10#
加油,越来越好
回复 使用道具 举报
即使这样写,打印出来也应该是23.3啊,内存会是23.299999,但是打印出来还应该是输入的数,没超过长度的话。楼主是用Xcode试的吗?
回复 使用道具 举报
wkop 中级黑马 2015-11-20 08:36:23
12#
打滚的橘子 发表于 2015-11-20 03:30
即使这样写,打印出来也应该是23.3啊,内存会是23.299999,但是打印出来还应该是输入的数,没超过长度的话 ...

恩,是用Xcode试的。为什么会出现这个现象应该是涉及到底层数据的处理问题吧。至于底层数据是怎么运转的我也不清楚,以后精力有限的情况下再研究吧,  ios自学视频进行中…
回复 使用道具 举报
过来看看  
回复 使用道具 举报
ToBeJeek1 来自手机 中级黑马 2015-11-20 12:46:24
14#
单精度浮点型有效位为7位,默认小数位数为6位
回复 使用道具 举报
wkop 发表于 2015-11-20 08:36
恩,是用Xcode试的。为什么会出现这个现象应该是涉及到底层数据的处理问题吧。至于底层数据是怎么运转的 ...

准备报哪期?
回复 使用道具 举报
wkop 中级黑马 2015-11-21 07:58:17
16#

1月10号那一期,你呢?
回复 使用道具 举报
本帖最后由 springD 于 2015-11-21 13:45 编辑


浮点数据在计算机中以以上方式存储,用2进制来表示小数部分以及用2的幂次方来表示指数部分。float数据存放小数的位数为23位。以6.25为例,换为2进制为110.01,转换为浮点数据的科学计数为1.1001*2^2。23.5换为2进制数为10111.1,转换为浮点数据的科学计数为1.01111*2^4。我们发现2进制的科学计数的整数部分都为1,因此可以省却不存储,因此23位的尾数实际上的存储精度是24位。
我们将6.25的2进制数存储在内存中
10010000 00000000 00000000
23.5的2进制数存储在内存中
01111000 00000000 00000000
9的2进制数为1001,任何一个10进制个位数可以用4位2进制数表示,因此23位尾数的存储精度位(23+1)/4=6.
回复 使用道具 举报
我有个少年梦 来自手机 中级黑马 2015-11-21 12:15:33
18#
加油不错哦加油不错哦
回复 使用道具 举报
过来看看,
回复 使用道具 举报
wkop 发表于 2015-11-21 07:58
1月10号那一期,你呢?

我准备报长沙的,也是1月的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马