首先概述一下浮点的类型以及两个类型的字长和各种不同的特征:
类型 | 字长 | 范围 | 有效数字 |
float | 32(四个字节) | +/-(1.20×10^38~3.40×10^38),0,+/-inf,nan | 7 |
double | 64(八个字节) | +/-(2.2×10^-308~1.79×10^308),0,+/-inf,nan | 15 |
nan表示它不是一个有效的数字(not a number)。inf的意思是无穷大。
当然,注意这里面的float和double都可以表示接近0的东西,但是过于接近0的话,是无法表达的。
我们再用一个表格来进行两种浮点数的输出和输入的总结
类型 | scanf | printf |
float | %f | %f,%e |
double | %lf | %f,%e(这块我一般情况下都是使用的%lf) |
注意这里的%e输出的是以科学计数法的形式输出,我们在代码中具体看一下这个输出语句的结果:
我们在输出的时候进行对比输出,看看两个输出的区别:
#include<stdio.h>
int main()
{
double ff = 1234.56789;
printf("%e,%f", ff, ff);
return 0;
}
结果出来是这个样子的:

当然把百分号后面的小写的e改为大写的E之后,在输出的时候也是把科学计数法的小写的e变为大写的E罢了。
我们以一个科学计数法表示的数字为例子,来进行一系列的说明:
比如-5.67E+16
从左往右有几点是要注意的:
是最前面的+和-两个符号这个代表整个数字的正负。
后面的数字可以有小数点也可以没有小数点。
大写的E和小写的e都是 可以的。
在整个数中不能带有空格。
最后的表示次方的数字,如果是正数的话,就可以带正号也可以不带正号,如果是负数的话就必须带上负号。
当然不仅在输出的时候可以使用科学计数法,我们在输入的时候也可以使用科学计数法 。
当我们使用%f或者%lf输出的时候,最后输出的结果默认是小数点后6位,当然我们可以在百分号和f中间加上小数点和你想输出的小数后面的位数。
注意这里的输出是四舍五入的输出,我们可以在程序中具体看一下:
#include<stdio.h>
int main()
{
printf("%.3f\n", -0.0049);
printf("%.30f\n", -0.0049);
printf("%.3f\n", -0.00049);
return 0;
}
最后输出的结果是这个样子的:

我们可以看到这里并不是精度的问题而是浮点数自带的误差所导致。
当我们极端的使用取小数点的方式的时候,出现-0.000的形式。
当然,注意的是如果位数和小数点后几出现冲突的话,结果是以小数点后几位作为标准的。
同时注意这里面的四舍五入的机制。
这里补充一点上面的四舍五入的机制。
准确来讲的话不是四舍五入, 而是四舍六入。
当需要四舍五入的那位为5的时候,如果它的前一位为奇数的话,那就往前进一位,如果前面的那一位为偶数的话,那就舍弃这一位
当然在后面学到使用四舍五入的时候可以使用加0.5的方法来解决,比如自己自定义一个函数来进行四舍五入的判断。