未入门初学者,在最新版vscode上用gcc编译C语言,代码如下:
#include <stdio.h>
int main(void)
{
double a=5.555555555555;
long double b=5.555555555555;
printf("%f\n", a);
printf("%f\n", b);
}
运行数遍,输出皆为:
5.555556
0.000000
改为“%lf",输出为:
5.555556
0.000000
改为"%le",输出为:
5.555556e+000
3.172866e-317
为什么一遇到long double类型就这样呢?想不明白,求指点!
printf("%.12Lf\n", b);
__mingw_printf("%.12Lf\n", b); //windows clang64 用ucrt运行时库
printf打印时指定下位数就好了
#include <stdio.h>
int main(void) {
double a = 5.555555555555;
long double b = 5.555555555555;
printf("%.12f\n", a);
printf("%.12f\n", b);
}
//5.555555555555
//5.555555555555
C标准规定long double类型至少与double类型的精度相同,具体long double占多少字节还要看具体编译器
我在我的vscode+gcc编译器环境下,sizeof(long double)等于16字节,即128位,比double的64位大
printf中%f只能用于float和double类型,不能用于long double
%lf的写法也是无效的,小写l只用于long int或者unsigned long int(两个l同理)
应该写为%Lf,大写L用于表示long double
参考资料:https://www.tutorialspoint.com/c_standard_library/c_function_printf.htm
https://cplusplus.com/reference/cstdio/printf/
用%llf呢