C %0.3lf和%3lf之间有什么区别?

C %0.3lf和%3lf之间有什么区别?,c,C,我知道%0.3lf告诉printf()要打印的数字的长度,当我用谷歌搜索%3lf的含义时,我得到了相同的解释,尽管它们的工作原理完全不同,正如您在下一段代码中看到的: double a = 1.234; printf("%0.3lf\n", a); printf("%3lf", a); 输出为: 1.234 1.24000 提前感谢%0.3lf表示打印精度为小数点后3点 %3lf表示打印宽度至少为3宽 我用谷歌搜索了%3lf的含义 您可以在cppre

我知道%0.3lf告诉printf()要打印的数字的长度,当我用谷歌搜索%3lf的含义时,我得到了相同的解释,尽管它们的工作原理完全不同,正如您在下一段代码中看到的:

double a = 1.234;

printf("%0.3lf\n", a);
printf("%3lf", a);
输出为:

1.234
1.24000

提前感谢

%0.3lf
表示打印精度为小数点后3点

%3lf
表示打印宽度至少为3宽

我用谷歌搜索了%3lf的含义

您可以在cppreference.com上找到有关C库函数的信息。(它也是对C++的引用,所以请确保页面在左上角表示“C”而不是“C++”。
%3lf
中的
3
是一个字段宽度

整数值或
*
指定最小字段宽度。如果需要,结果将用空格字符填充(默认情况下),右对齐时填充在左侧,左对齐时填充在右侧。在使用
*
的情况下,宽度由类型为
int
的附加参数指定,该参数出现在要转换的参数和提供精度的参数(如果提供)之前。如果参数的值为负值,则结果为指定的
-
标志和正的字段宽度。(注意:这是最小宽度:该值永远不会被截断。)

%0.3lf
中的
0
是一个标志,用于指定应使用零将数字填充到最小字段宽度。它没有用,因为没有指定最小字段宽度。有可能作者认为这是一个字段宽度

对于整数和浮点数转换,前导零用于填充字段而不是空格字符。对于整数,如果明确指定了精度,则将忽略它。对于其他转换,使用此标志会导致未定义的行为。如果存在
-
标志,则忽略该标记

%0.3lf
中的
.3
是一个精度

后跟整数或
*
,或两者都不指定转换精度。在使用
*
的情况下,精度由类型为
int
的附加参数指定,该参数出现在要转换的参数之前,但如果提供了最小字段宽度,则出现在提供最小字段宽度的参数之后。如果此参数的值为负值,则忽略它。如果既不使用数字也不使用
*
,则精度为零。有关精度的确切影响,请参见下表

[对于
f
]精度指定小数点字符后显示的精确位数。默认精度为
6
。在替代实现中,即使后面没有数字,也会写入小数点字符。有关无穷大和非数字转换样式,请参见注释


(在所有情况下都强调矿山。)

%0.3lf
表示该双精度数据的基点后的3位数字。
%3lf
不提供特殊的可用性,因为
%3lf
将提供与
%lf

完全相同的输出
前面的数字(或者如果没有
)是字段宽度。这指定输出将生成的最小字符数。如果输出大小小于此值,则在左侧用空格填充

后面的数字是精度。对于
%f
格式的浮点数,它指定小数点后要打印的位数

  • 宽度修饰符
    l
    f
    转换说明符没有影响<代码>浮点s转换为双精度
  • 2.宽度和精度:
    3.示例:

    是否
    “1.24000”
    为真实输出?或者缺少一些字符?实际上,小数点前的
    0
    不是字段宽度;它是一个标志,指示字段应该用前导零填充宽度-但是没有宽度,因此
    0
    是无意义的。使用
    %.3lf
    将产生相同的结果。只有当您使用类似于
    %08.3lf
    的东西时,
    0
    才会变得相关并改变输出。@Jonathan Leffler,当然了。固定的。当没有字段宽度时,很容易认为它是字段宽度。
    之前的
    0
    是一个标志,而不是字段宽度。另请参见此项。
    float
    数字转换为
    double
    。。。。更准确地说:
    float
    值在作为额外参数传递给vararg函数(如
    printf
    )时隐式转换为
    double
    %3lf
    将提供与
    %lf
    完全相同的输出。。。正确,但需要解释。事实上,
    %4lf
    可能会产生与
    %lf
    不同的输出,您能解释一下是如何产生的吗?我在那里也得到了完全相同的输出。对于有限值,您应该得到相同的输出,但是对于
    inf
    nan
    ,输出会有所不同,这将被填充为4个字符,初始空格为
    %4lf
    ,但对于
    %lf
    :)现在我明白了。非常感谢您的澄清。