> 文档中心 > 【C语言】double 关键字

【C语言】double 关键字


🚩write in front🚩   

🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 & 星级博主~掘金⇿InfoQ~51CTOP创作者~周榜109﹣总榜883⇿全网访问量30w+🏅
🆔本文由 謓泽 原创 CSDN首发🙉如需转载还请通知⚠
📝个人主页-謓泽的博客_CSDN博客 📃
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏-【C语言】关键字_謓泽的博客-CSDN博客🎓
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩

⑨ double ⇿ 双精度浮点

⒈描述⇢双精度浮点类型的使用关键字是 double,它在内存中占用的是⑧个字节。

⒉作用⇢定义一个双精度类型变量,然后其赋值浮点型数字,最后通过输出语句将其显示打印输出在控制台上。

⒊注意⇢double 类型在程序默认输出⑥位小数点,有效数字是6~7,格式符为 %lf 的。

代码示例如下①👇

#includeint main(void){    double a = 3.14159;    printf("双精度浮点型 = %lf\n",a);    return 0;}

运行结果🖊 

双精度浮点型 = 3.14159 

📝拓展知识点如下👇

  1. %f 以十进制形式输出 float 类型;
  2. %lf 以十进制形式输出 double 类型;
  3. %e 以指数形式输出 float 类型,输出结果中的 e 小写;
  4. %E 以指数形式输出 float 类型,输出结果中的 E 大写;
  5. %le 以指数形式输出 double 类型,输出结果中的 e 小写;
  6. %lE 以指数形式输出 double 类型,输出结果中的 E 大写。

代码示例如下②👇

#includeint main(void){double a = 3.24359223;printf("双精度浮点型 = %.40lf\n", a);return 0;}

运行结果🖊

双精度浮点类型 = 3.24359223...(以及小数点后面32位的0)

🍏注⇢.40代表的是后续的小数点的数字保留多少位的数字。

🍊遗留问题→浮点数的内容精度损失。

(ง •_•)ง问题-此时细心的张三同学在它的编译器发现了一个问题。

说明-在上述的代码当中张三同学发现在后面的小数点32位,原本都应该是数字0的。结果出现了一个数字是1的。

3.2435922300000000000000000000000000000001

一开始张三同学还以为他看错了,结果看了几遍都发现自己并没有看错。謓泽这个是怎么回事呢?明明在实际的值当中并没有出现过1的这个数字阿,按理来说不会这也阿。

解答-张三同学你发现的这个问题我们就把它称之为四字精度损失。从理论的角度上来说它打印出来的值因该是全0的数字的,那么想要知道为什么是这个样子的我们就需要了解一个概念就是数据的存储。数据存储这里就不详细的介绍了,在博主的[C系列]有篇文章当中有并且讲的非常的详细。如果你对这个不了解的话可以去康康(●'◡'●)

🍈专业词汇解释精度损失⇢上述的拓展当中我们提到过精度损失,接下来我们用代码来讲述下倒不如说是证明下这精度损失到底是不是为真正是浮点数类型为精度损失了。

#include int main(void){double x = 1.0;double y = 0.1;printf("x=%.20lf\n", x);printf("y=%.20lf\n", y);if ((x - 0.9) == 0.1)printf("No精度损失\n");elseprintf("Yes精度损失\n");return 0;}

运行结果🖊

x = 1.00000000000000000000

y = 1.00000000000000001000

Yes精度损失

①结论⇢浮点数在进行比较的时候,绝对不能直接使用==号来进行比较。

②因为⇢浮点数本身就是存在着精度损失,从而导致最终结果有细微的差别的。