| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1958 人关注过本帖
标题:对float输入输出的疑惑
只看楼主 加入收藏
云清f淡
Rank: 1
来 自:江苏南京
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-1-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
对float输入输出的疑惑
#include<stdio.h>

int main()
{
    float f;
    scanf("%6f",&f);
    printf("6f\n",f);

    return 0;

}

如果输入的是1.2的话,输出结果是1.200000.这没错;
但是输入的是123.1的话,输出结果是123.099998,这就有点不理解了,按照我的理解也应该为123.100000才对。
求解释....
搜索更多相关主题的帖子: return 
2011-01-16 10:31
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:3 
你输入的十进制数,而内存中存储的是二进制数。

★★★★★为人民服务★★★★★
2011-01-16 10:41
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
收藏
得分:5 
#include<stdio.h>

int main()
{
    float f;
    double df;

   
    scanf("%f",&f);
    df=f;
    printf("%f\n",f);
    printf("%lf",df);

    return 0;

}
输入123.1
输出123.099998
    123.099998
以下是百度大叔提供的:
对于浮点型double和long double,有相应的转换说明符(%f表示双精度型,%lf表示长双精度型),而float却没有。其中的原因是,在K&RC下,float值用于表达式或用作参数前,会自动转换成double类型。而ANSI C一般不会自动把float转换成double。有些程序已假定其中的float参数会被转换成double,为了保护大量这样的程序,所有printf()函数的float参数还是被自动转换成double型。因此,在K&RC或ANSI C下,都无需用特定的转换说明符来显示float型。

帮人《---》帮己
2011-01-16 10:53
云清f淡
Rank: 1
来 自:江苏南京
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-1-15
收藏
得分:0 
回复 3楼 逐渐学习
明白了 谢谢 ...
2011-01-16 11:21
huangapple
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:545
专家分:1790
注 册:2010-12-30
收藏
得分:2 
这样跟你讲吧,float在内存中与他表示的数不是一一对应的。你想下float占4个字节,但表示的数超过了2^63个。所以会出点小错。。。具体的情况楼主还得查查相关资料,讲得会比较详细专业

勤能补拙,熟能生巧!
2011-01-16 11:32
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
听说为什么浮点有误差,就是因为是CPU有BUG,CPU对浮点支持不怎样好,所以尽可能用整形为好

小代码,大智慧
2011-01-16 11:38
cacker
该用户已被删除
收藏
得分:4 
提示: 作者被禁止或删除 内容自动屏蔽
2011-01-16 11:57
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:2 
#include<stdio.h>
int main()
{
    float f;
    scanf("%f",&f);
    printf("%.6f\n",f);
    return 0;
}

   唯实惟新 至诚致志
2011-01-17 02:14
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:2 
输入能规定精度吗?#include<stdio.h> int main() {     float f;     scanf("%6f",&f);    printf("→_→6f\n",f);//不报错吗?     return 0; }

[ 本帖最后由 A13433758072 于 2011-1-17 07:55 编辑 ]

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-01-17 07:54
sunmingchun
Rank: 4
来 自:安徽-滁州
等 级:业余侠客
帖 子:198
专家分:277
注 册:2010-4-2
收藏
得分:2 
回复 9楼 A13433758072
我的编译器不报错,可是这种写法是不准确的。标准是不可以的。
2011-01-17 23:26
快速回复:对float输入输出的疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017912 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved