有关c语言浮点数的计算问题

为什么float数据类型不行?

将float、double转换为字符过程中可能存在精度损失,但是通过%.8lf可以规避
(1)float小数点前后加起来有效数字只有6位。当给定的float有效数在6位以内转换为字符不会丢失精度,当有效位数大于6位就会存在精度丢失
    //精度没有丢失
    char buf[100]={'\0'};
    float aa=8000.25;
    sprintf(buf,"%f",aa);   //8000.250000
    //精度没有丢失
    char buf[100]={'\0'};
    floataa=8.00025;
    sprintf(buf,"%f",aa);   buf = 8.000250
    //精度丢失,存在误差
    charbuf[100]={'\0'};
    float aa=8000.251;
    sprintf(buf,"%f",aa);  //8000.250977
    //精度丢失,存在误差此时使用.8lf也无效
    char buf[100]={'\0'};
    float aa=8000.251;
    sprintf(buf,"%.8lf",aa);//8000.25097656

精度不够