C %0.3lf和%3lf之间有什么区别?
我知道%0.3lf告诉printf()要打印的数字的长度,当我用谷歌搜索%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
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转换为双精度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
:)现在我明白了。非常感谢您的澄清。