c语言怪事:double类型数据以%.6f打印,输出却是8位小数

具体代码,如下:

#include <stdio.h>

#include <math.h>

double funcos( double e, double x );

int main()

{

double e, x;

scanf("%lf %lf", &e, &x);

printf("cos(%.2f) = %.6f\n", x, funcos(e, x));

return 0;

}

double funcos( double e, double x )
{
    int i=0,j=0,k;
    double sum =0;
    double factorial = 1;
    
    while(1)
    {   
        if(j==0)
            factorial = 1;
        else
        {
            for(k=1; k<=j; ++k)//求j的阶乘
            {
                factorial *= k; 
            }
        }
        if( (pow(x,j)/factorial) < e)//判断最后一项与e的关系
        {
            sum += ( pow(-1,i)*pow(x,j) )/factorial;
            printf("%f\n",sum);
            break;
        }
        sum += ( pow(-1,i)*pow(x,j) )/factorial;
        printf("%f\n",sum);
        i++;
        j += 2;
        factorial = 1;
    }
    
    return sum;
}

问题是:

输出时,打印了8位小数。即main函数中打印时%.6f没有起作用

你可以单独用 gcc 6.5.0 这个版本测试下,VC++ 没有问题。