标题:菜鸟请教:float型数输出的一个问题
只看楼主
XXX晴天XXX
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-12-17
 问题点数:0 回复次数:2 
菜鸟请教:float型数输出的一个问题
大家好,我是C语言初学者,想请教一个问题:
/*
在VC6.0下这样写运行结果是错误的,输出
12345678848.000000
12345678848.000000
为什么是这样的呢?
/*
void main()
{
 float a,b;
 a=123456.789E5f;
 b=a+20;
 printf("%f\n",a);
 printf("%f\n",b);
}
/*但如果像下面这样写的话输出则是正确的
输出:

12345678848.000000
12345678868.000000

void main()
{
 float a;
 double b;
 a=123456.789E5f;
 b=a+20;
 printf("%f\n",a);
 printf("%f\n",b);
}
*/
是不是在VC下所有的常数都是double型的?谢谢大家先!

搜索更多相关主题的帖子: 输出 float 
2009-10-01 19:34
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
得分:0 
void main()
{
float a;        //a 是单精度,有效数字是6-7位,
double b;       //b是双精度,有效数字是15-16位
a=123456.789E5f;
b=a+20;         //b=123456.7 8920E5,红色float的精度范围,后几位无效,但b为double时,可使123456.78920均有效
printf("%f\n",a);
printf("%f\n",b);
}
所以,当a为float型时,a的值跟20相比很大,即使加起来也只是a的后几位变了,而后面的几位又是无效的,所以加不加没有区别。为了有区别,就把b改为double型,这样后几位都变得有效,即可以正确输出。
2009-10-01 22:33
沈默
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2009-9-29
得分:0 
二楼解释的很好!
2009-10-01 22:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-287401-1-1.html




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

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