C语言中浮点数float和double输出的问题

#include<stdio.h>voidmain(){floatnum;doublednum;num=563.23;dnum=78954327.07;printf("n... #include<stdio.h>
void main()
{
float num;
double dnum;
num=563.23;
dnum=78954327.07;
printf("num=%f",num);
printf("\ndnum=%lf",dnum);
}
执行结果:
num=563.229980
dnum=78954327.0700000

我想请问如上题,书上写float单精度浮点型提供7个有效数字,而double双精度浮点型提供15到16位有效数字。那怎么输出结果会是这样?位数是不是多了?请知道的大侠们帮帮忙,小女子先谢过了~
展开
 我来答
White_MouseYBZ
2015-12-18 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:5965万
展开全部

这里有个概念要搞清楚,精度和输出小数点后多少位不是一回事。精度是说某种类型的浮点数在C中计算时有多少位是有效的,这实际上是包括整数部分的,但不包括小数点那一位;而输出小数点后多少位是由输出函数printf中的控制字符串确定的。float的精度是6到7位,就是说连整数部分有6位是可信的,再长了就是机器垃圾值了;double有16到17位是可信的,再多了也是机器垃圾值。下面的代码可说明这一问题。

float型x的值从第8位2开始就是垃圾值了,尽管要求输出小数点后10位;double型y的值从第18位起也是垃圾值,尽管要注输出了小数点后20位——这里全是0是碰巧,绝大多数情况下是乱七八糟的机器值。

cjxily
2010-06-11 · 超过16用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:46.3万
展开全部
类型 比特数 有效数字 数值范围
float 32 6-7 -3.4*10(-38)~3.4*10(38)
double 64 15-16 -1.7*10(-308)~1.7*10(308)
long double 128 18-19 -1.2*10(-4932)~1.2*10(4932)

简单来说,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++6.0平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位,但在我的电脑且VC++6.0平台中默认显示同样是6位有效数字(见我的double_float文件)

还有,有个例子:在C和C++中,如下赋值语句

float a=0.1;

编译器报错:warning C4305: 'initializing' : truncation from 'const double ' to 'float '

原因:

在C/C++中(也不知道是不是就在VC++中这样),上述语句等号右边0.1,我们以为它是个float,但是编译器却把它认为是个double(因为小数默认是double),所以要报这个warning,一般改成0.1f就没事了。

通常的做法,经常使用double,而不喜欢使用float。

参考 BBB33141159的回答
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
柔美还谦逊的白桦d
2020-05-30 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.3万
采纳率:29%
帮助的人:739万
展开全部
如果想让结果更精确的话就选double,如果结果只要求小数,精确度不要那么高,选
float就行了,小数点后两位的输出结果,double
是首
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
革蓉窦和悦
2020-01-20 · TA获得超过3631个赞
知道小有建树答主
回答量:3088
采纳率:34%
帮助的人:389万
展开全部
答案是对的.什么叫有效?单精度七位说明前七位是正确的而后面电脑会随机输出.双精度一样的道理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2bd1b68
2010-06-11
知道答主
回答量:55
采纳率:0%
帮助的人:30.3万
展开全部
不管float,double,输出时小数点后默认都是6位
不过不知道 你的double怎么是7位。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式