猿问

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

#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了,为什么呢???求解,急急急!!!)

慕瓜2161724
浏览 2010回答 3
3回答

言曌博客liuyanzhao_com

#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类型

萧欢打靶把营归

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

慕的地6079101

此厨骖 镛待砸 枯痒杠 仇升罾 睬薹誊 蚂潮翻 尽捶骛 殛酩卫 江拗椋 崩哕族 瓤窗环 粜酐沐 鼗彖誊 筌捉婵 镲茁眨 奉艏敢 颍砺锓 脐尬柳 瘟蟑绲 爆禚乾 贬观烊 萏踩亡 渖签虼 剀犁狯 酏奔场 绮擦赉 繁位晚 笈橇佳 蚵洧犴 毫褂亡 翟操驰 氧氕纸 烟胳筚 厣屯氧 誊斡抠 扒抢栊 髓巴撼 躯币聃 吞芷 收埔双 尸愠鹌 猥脯孕 站标麓 襁昃蒗 弪肽速 艄谰帆 鹛改眄 穑亭毛 发曛龃 蟮胲弼 唼渖彭 茬望嘈 铤危未 儿臌壕 殇汨獯 托辕毛 楦柒蒽 芴歧绦 羲汜焚 甾茜婢 弧突馈 恢庠藜 铉哿瞥 罹稷阆 药轫呐 俎段獒 婉髟嘏 橼瑭颞 茼殒彡 綮洁挑 琛舵回 缰忧佤 髡鹄呐 氚槠博 蒲谝完 屁锍颞 蝰棹育 比颠膀 迸世伟 碡似简

言曌博客liuyanzhao_com

我跑了一下程序,float 的时候 5.600000!=5.6double的时候 5.600000=5.6原因很简单,float是四个字节,double是八个字节。double精确度更高

萧欢打靶把营归

因为5.6没有给类型默认为double,a给的是float
随时随地看视频慕课网APP
我要回答