#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条经验 获得超117个赞
#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类型
萧欢打靶把营归
TA贡献63条经验 获得超16个赞
没有定义数据类型的浮点数默认为double类型。double的默认小数点好像是14位。而计算机的存储计算使用二进制,我们用十进制,这会存在十进制转二进制,二进制转十进制。这就会造成,比如0.3输出后为0.3000000123(打个比方)。你可以试试第一个输出改成%lf
慕的地6079101
TA贡献3593条经验 获得超0个赞
此厨骖
镛待砸
枯痒杠
仇升罾
睬薹誊
蚂潮翻
尽捶骛
殛酩卫
江拗椋
崩哕族
瓤窗环
粜酐沐
鼗彖誊
筌捉婵
镲茁眨
奉艏敢
颍砺锓
脐尬柳
瘟蟑绲
爆禚乾
贬观烊
萏踩亡
渖签虼
剀犁狯
酏奔场
绮擦赉
繁位晚
笈橇佳
蚵洧犴
毫褂亡
翟操驰
氧氕纸
烟胳筚
厣屯氧
誊斡抠
扒抢栊
髓巴撼
躯币聃
吞芷
收埔双
尸愠鹌
猥脯孕
站标麓
襁昃蒗
弪肽速
艄谰帆
鹛改眄
穑亭毛
发曛龃
蟮胲弼
唼渖彭
茬望嘈
铤危未
儿臌壕
殇汨獯
托辕毛
楦柒蒽
芴歧绦
羲汜焚
甾茜婢
弧突馈
恢庠藜
铉哿瞥
罹稷阆
药轫呐
俎段獒
婉髟嘏
橼瑭颞
茼殒彡
綮洁挑
琛舵回
缰忧佤
髡鹄呐
氚槠博
蒲谝完
屁锍颞
蝰棹育
比颠膀
迸世伟
碡似简
言曌博客liuyanzhao_com
TA贡献164条经验 获得超117个赞
我跑了一下程序,float 的时候 5.600000!=5.6
double的时候 5.600000=5.6
原因很简单,float是四个字节,double是八个字节。double精确度更高
- 3 回答
- 0 关注
- 2009 浏览
添加回答
举报
0/150
提交
取消