c语言对浮点数的处理默认是double吗,C语言中浮点数float和double输出的问题

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

关注:260  答案:6  信息版本:手机版

解决时间 2019-01-12 07:33

斑駁影

2019-01-11 09:20

#includevoid 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位有效数字。那怎么输出结果会是这样?位数是不是多了?请知道的大侠们帮帮忙,小女子先谢过了~

最佳答案

哼嘿闯九州

2021-01-13 11:38

类型 比特数 有效数字 数值范围

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的回答

全部回答

1楼古灵精怪小妖精

2021-01-13 16:16

用%f和%lf

2楼卖樱桃的小丸子

2021-01-13 15:40

不管float,double,输出时小数点后默认都是6位

不过不知道 你的double怎么是7位。。。

3楼古灵精怪小妖精

2021-01-13 14:31

如果想让结果更精确的话就选double,如果结果只要求小数,精确度不要那么高,选

float就行了,小数点后两位的输出结果,double 是首

4楼作业被我养得白白的

2021-01-13 13:06

不要多想。

只要记得

float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位

可以参考:http://hi.baidu.com/yu_xiyan/blog/item/461482dbb32d0c6dd1164edf.html

写的比较清楚

5楼不要捏我脸啦

2021-01-13 12:16

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

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

我要举报

如以上问答内容为色情/暴力/低俗/不良/侵权等信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值