我试图理解为什么我没有在输出中获得123.123
。我应该使用f
代替lf
吗?
#include <stdio.h>
void main() {
double foo = 123.123;
int blah = 54321;
printf("%d\n", blah);
printf("%10d \n", blah);
printf("%08d\n",blah);
printf("%10d \n", blah);
printf("%010d \n", blah);
printf("%lf\n", foo); // Why am I getting 123.123000?
printf("%.4f\n", foo);
printf("%4.2f \n", foo);
}
答案 0 :(得分:3)
您将获得123.123000
,因为默认情况下"%lf"
会打印到小数点后6位。相反,请使用%.3lf
。
答案 1 :(得分:2)
%f
的默认精度为6位小数,因此输出为123.123000
。
要删除小数部分的尾随零(如果没有小数,则删除小数点),使用%g
。
请注意,l
格式中的%lf
必须采用scanf
格式将数字转换为double
变量,但printf
无效其中所有浮点值都作为double
传递。因此%lf
和%f
对printf
的行为完全相同。
另请注意main
的原型是int main(void)
或`int main(int argc,char * argv [])或等效原型。
答案 2 :(得分:1)
您仍然可以使用%lf
,只需告诉它您需要多少精度数字(例如3):
printf("%.3lf,\n" foo); //prints 123.123
答案 3 :(得分:0)
这只是默认精度。 printf
函数%lf
和%f
的解释方式相同。真正的区别在于scanf
函数,其中%lf
将值读取为double,%f
将值读取为float。
有一篇有趣的帖子here