为了账号安全,请及时绑定邮箱和手机立即绑定

各位大师看看,为什么这个代码的执行结果分别是5.600000和5.6!=5.6???怎么理解???

各位大师看看,为什么这个代码的执行结果分别是5.600000和5.6!=5.6???怎么理解???

C
慕瓜2161724 2017-07-26 23:23:27
#include "stdio.h"int main(int argc,char**argv){ double a=5.6; printf("a=%f\n",a); if(5.6==a) {  printf("5.6=5.6\n"); } else {  printf("5.6!=5.6\n"); } return 0;    }(我不理解为什么后面的执行结果是5.6!=5.6,而且无论if语句中a的值为多少,结果都是一样的。如果我把float改为double,执行结果就变成5.6=5.6了,为什么呢???求解,急急急!!!)
查看完整描述

3 回答

已采纳
?
言曌博客liuyanzhao_com

TA贡献164条经验 获得超116个赞

#include "stdio.h"
int main(int argc,char**argv)
{
     //double   a=5.59999999999999960000000000000000000000000000000000
     //float    a=5.59999990463256840000000000000000000000000000000000
     //5.6是double类型处理的 
	 float  a=5.6;
     printf("a=%.50f\n",a);
     if(5.6==a)
	 {
	     printf("5.6=5.6\n");
	 }
	 else
	 {
	     printf("5.6!=5.6\n");
	 }
	 return 0;
    
}

5.6 是 double类型

5.6f 是 float类型

查看完整回答
反对 回复 2017-07-27
点击展开后面2
?
萧欢打靶把营归

TA贡献63条经验 获得超16个赞

没有定义数据类型的浮点数默认为double类型。double的默认小数点好像是14位。而计算机的存储计算使用二进制,我们用十进制,这会存在十进制转二进制,二进制转十进制。这就会造成,比如0.3输出后为0.3000000123(打个比方)。你可以试试第一个输出改成%lf

查看完整回答
1 反对 回复 2017-07-27
?
言曌博客liuyanzhao_com

TA贡献164条经验 获得超116个赞

我跑了一下程序,float 的时候 5.600000!=5.6

double的时候 5.600000=5.6

原因很简单,float是四个字节,double是八个字节。double精确度更高

查看完整回答
反对 回复 2017-07-27
  • 慕瓜2161724
    慕瓜2161724
    为什么double时是5.6!=5.6呢,而float时就不是呢?能不能详细解释一下谢谢
?
萧欢打靶把营归

TA贡献63条经验 获得超16个赞

因为5.6没有给类型默认为double,a给的是float

查看完整回答
反对 回复 2017-07-27
  • 慕瓜2161724
    慕瓜2161724
    哦~代码打错了,double应该为float的,结果才有5.6!=5.6的。可是,我还是不理解6.6!=5.6怎么来的,求大神详解
  • 萧欢打靶把营归
    萧欢打靶把营归
    第一个回答里面有提到,就是二进制转化十进制和十进制转化二进制的问题,具体点我也不会了,计算机组成原理忘得差不多了(๑•ั็ω•็ั๑)。
  • 3 回答
  • 0 关注
  • 1949 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信