这为啥不原样输出啊呐


#include <stdio.h>
    int main()


    {
        float fa,fb,fc,fsum;
        double d;
          fa=3141.592678;
          fb=6.026e-27;
          fsum=fa+fb ;
          d=31415926.78;
          printf("float 类型数据的打印结果:\n");
          printf("fa=%f\t fb=%f\t fsum=%7.2f\n",fa,fb,fsum);//用格式符%f 输出 float 类型变量
          printf("fa=%e\t fb=%e\t fsum=%e\n",fa,fb,fsum); //用格式符%e 输出 float 类型变量
          printf("double 类型数据的打印结果:\n ");
          printf("d=%lf, d=%e\n",d,d);
        return 0;
    }

float 类型数据的打印结果:
fa=3141.592773 fb=0.000000 fsum=3141.59
fa=3.141593e+003 fb=6.026000e-027 fsum=3.141593e+003
double 类型数据的打印结果:
d=31415926.780000, d=3.141593e+007
Press any key to continue

这fa怎么从3141.592678变成3141.592773了 ,fb也约成了0

float的精度是有效数字6~7位,fb=6.026e-27这个已经远远超出范围了。

对于浮点数的计算,计算机是有一定的有效精度的,精度位数后面的结果不会精确执行

float是单精度,有效数字位为6 – 7位,,double双精度,有效数字位为15 – 16位