为什么我在输出中得到123.123000?

时间:2016-10-31 23:44:24

标签: c

我试图理解为什么我没有在输出中获得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);
}

4 个答案:

答案 0 :(得分:3)

您将获得123.123000,因为默认情况下"%lf"会打印到小数点后6位。相反,请使用%.3lf

答案 1 :(得分:2)

%f的默认精度为6位小数,因此输出为123.123000

要删除小数部分的尾随零(如果没有小数,则删除小数点),使用%g

请注意,l格式中的%lf必须采用scanf格式将数字转换为double变量,但printf无效其中所有浮点值都作为double传递。因此%lf%fprintf的行为完全相同。

另请注意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