
单精度浮点型与双精度浮点型的区分
LeonardoFox| 类型 | 关键字 | 占位符 | 占用内存 | 有效数字位数(精度) | 相当于生活中的… |
|---|---|---|---|---|---|
| 单精度浮点型 | float |
%f |
4 字节 | 6 ~ 7 位 | 普通的家用计算器 |
| 双精度浮点型 | double |
%lf |
8 字节 | 15 ~ 16 位 | 科学实验室的精密仪器 |
💡 怎么理解“有效数字位数”?
这里的位数是从左边第一个不是 0 的数字开始算起的总位数,而不是单指小数点后面的位数。
举个例子:
假设我们要存圆周率 π。
- 如果用
float a = 3.1415926535;,因为float只能管好前 7 位数字,打印出来可能变成3.141592(后面的数字就失真、变成乱码了)。 - 如果用
double b = 3.1415926535;,它能管好前 15 位数字,打印出来就是非常精确的3.1415926535。
🎯 日常是不是可以直接用 float(%f)?
答案是:平时练习完全可以!但有两个“潜规则”需要注意:
1. 为什么总是记不住 %lf?
在 C 语言的 printf(打印输出) 中,由于标准的规定,float 类型的参数在传递给 printf 时会自动转换成 double。
还有Python中,小数被统一成了Float这一个这对于学了Python的需要一段时间适应,C语言更加精准,更加精准,更加底层,所以就会出现这么多的定义符.
但是,不管是 float 还是 double 的变量,在 printf 里面直接用 %f 打印,都是完全合法的,不会报错!
也就是说:printf("体积为%.2f\n", volume); 这里的 volume 哪怕你定义成 double,用 %f 打印也完全没问题。这就解释了为什么你老觉得用 %f 就够了。
2. 唯一不能偷懒死穴:scanf(键盘录入)
虽然打印可以偷懒,但是用 scanf 读入数据时,必须严格对应,绝对不能搞混:
- 如果你定义了
float x;⇨ 必须用scanf("%f", &x); - 如果你定义了
double y;⇨必须用scanf("%lf", &y);(如果这里偷懒用%f,读进去的数据就会直接变成一堆奇怪的错误数字)。
记忆小连招
既然 %lf 记不住,那我们就用图形和口诀来记:
l的含义:lf里的l实际上就是long(长) 的意思。 所以就是长浮点数(long float)- 记忆联想:
double占了 8 个字节,比float的 4 字节更长、更大,所以要在%f前面加一个代表 long 的l,连起来就是%lf。
总结
平时写写代码,变量类型可以直接无脑用 float,输入输出全用 %f。(图方便,因为平时用不上这么多)
只有当题目要求你定义 double 时,记住在 scanf 里给 %f 加个长长的尾巴变成 %lf 就行了!
喜欢这篇文章的人也看了
评论
匿名评论隐私政策



