测试平台:gcc (Ubuntu 4.8.5-4ubuntu8~16.04.1) 4.8.5
- %f,默认输出六位小数(对float和double类型都是默认输出六位小数),有效数字只是前6位(包括整数部分和小数部分)
- %lf,默认输出六位小数(对float和double类型都是默认输出六位小数),但是通过%.16lf使其输出为16位小数,但是有效数字只是前16位(包括整数部分和小数部分)
double doub = 1.01234567890123456789;
printf("%lf\n", doub); //输出:1.012346。只有1.01234是有效的
printf("%.16lf\n", doub); //输出:1.0123456789012346。 只有1.012345678901234是有效的
printf("%f\n", doub); //输出:1.012346。只有1.01234是有效的。
printf("%.16f\n", doub); //输出:1.0123456789012346。
通过实验来看,好像在gcc (Ubuntu 4.8.5-4ubuntu8~16.04.1) 4.8.5下,%f和%lf的效果是一样的。
既然是一样的,推荐使用%f吧,因为在一些IDE上面(比如说codebloacks,其使用MinGW编译器),%lf输出是错误的
-_-!!,
参考:
[1] http://www.cplusplus.com/reference/cstdio/printf/?kw=printf
[2] scanf和printf 对于%lf和%f使用的不同点