题
我对此进行了一些搜索,但还没有得到特别直接的答案。在C(我猜是C++)中,使用时如何确定%后面的内容 printf
?。例如:
double radius = 1.0;
double area = 0.0;
area = calculateArea( radius );
printf( "%10.1f %10.2\n", radius, area );
我直接从一本关于 C 语言的书中获取了这个示例。这对我来说根本没有意义。你从哪里想到的 10.1f
和 10.2f
?有人可以解释一下吗?
解决方案
http://en.wikipedia.org/wiki/Printf#printf_format_placeholders 是 Wikipedia 对 printf 中格式占位符的参考。 http://www.cplusplus.com/reference/clibrary/cstdio/printf.html 也有帮助
基本上,简单的形式是%[宽度].[精度][类型]。宽度允许您确保正在打印的变量至少具有一定的长度(对于表格等有用)。Precision 允许您指定数字打印的精度(例如小数位等),并告知 C/C++ 你给它的变量是什么(字符、整数、双精度等)。
希望这可以帮助
更新:
使用您的示例来澄清:
printf( "%10.1f %10.2\n", radius, area );
%10.1f(指第一个参数:radius) 意味着使其长度为 10 个字符(即用空格填充),并将其打印为带有一位小数的浮点数。
%10.2(指第二个参数:area) 表示使其长度为 10 个字符(如上所述)并打印保留两位小数。
其他提示
man 3 printf
在 Linux 系统上将为您提供所需的所有信息。您还可以在线找到这些手册页,例如: http://linux.die.net/man/3/printf
10.1f表示小数点后1位、小数点前10位的浮点数。如果数字少于 10 位,则用空格填充。10.2f 相同,但小数点后保留 2 位。
在我见过的每个系统上,从 Unix 到 Rails 迁移,情况并非如此。@robintw 表达得最好:
基本上,简单的形式是%[宽度].[精度][类型]。
也就是说,不是“10个地方 前 小数点”,但是“10位, 之前和之后,并且包括 小数点。”
10.1f 表示 10 个字符宽、小数点后 1 位的浮点数。如果数字少于 10 位,则用空格填充。10.2f 相同,但小数点后保留 2 位。
您有以下基本类型:
%d - integer
%x - hex integer
%s - string
%c - char (only one)
%f - floating point (float)
%d - signed int (decimal)
%i - signed int (integer) (same as decimal).
%u - unsigned int
%ld - long (signed) int
%lu - long unsigned int
%lld - long long (signed) int
%llu - long long unsigned int
编辑:@Eli 的回复 (man 3 printf) 中列出了其他几个。
简而言之,% 后面的那些值告诉 printf
如何解释(或输出)稍后出现的所有变量。在你的例子中, radius
被解释为浮点数(即“f”),并且 10.1
提供有关打印时要使用多少位小数的信息。
看 这个链接 有关可与 printf 一起使用的所有修饰符的更多详细信息。
10.1f 意味着你想显示一个 F与 1 小数,显示的数字应该是 10 长字符。
手册页包含您想要的信息。要阅读上面的内容:
printf( "%10.2f", 1.5 )
这将打印:
1.50
然而:
printf("%.2f", 1.5 )
印刷:
1.50
注意两者的合理性。相似地:
printf("%10.1f", 1.5 )
将打印:
1.5
后的任意数字。是你想要打印的精度。之前的任何数字。是距左边距的距离。
其他人没有提出的一个问题是: 双倍的 与 a 相同 漂浮. 。在某些系统上,双精度数与浮点数需要不同的格式说明符。尤其是因为传递的参数可能具有不同的大小。
%f - float %lf - double %g - double