5

我已经对此进行了一些搜索,但没有得到特别直接的答案。在 C(我猜是 C++)中,你如何确定使用 % 之后的内容printf?例如:

double radius = 1.0;
double area = 0.0;
area = calculateArea( radius );
printf( "%10.1f     %10.2\n", radius, area );

我直接从一本关于 C 语言的书中拿了这个例子。这对我来说根本没有意义。你在哪里想出10.1f10.2f?有人可以解释一下吗?

4

8 回答 8

15

http://en.wikipedia.org/wiki/Printf#printf_format_placeholders是 Wikipedia 对 printf 中格式占位符的参考。http://www.cplusplus.com/reference/clibrary/cstdio/printf.html也很有帮助

基本上以简单的形式,它是 %[width].[precision][type]。宽度允许您确保正在打印的变量至少有一定的长度(对表格等很有用)。Precision 允许您指定数字打印到的精度(例如小数位等),并通知 C/C++ 您给它的变量是什么(字符、整数、双精度等)。

希望这可以帮助

更新:

为了澄清使用您的示例:

printf( "%10.1f     %10.2\n", radius, area );

%10.1f(指第一个参数:radius)表示使其长度为 10 个字符(即用空格填充),并将其打印为一个小数点后的浮点数。

%10.2(指第二个参数:area)表示使其长度为 10 个字符(如上)并以两位小数打印。

于 2008-08-20T13:50:05.570 回答
7
man 3 printf

在 Linux 系统上将为您提供所需的所有信息。您还可以在线找到这些手册页,例如http://linux.die.net/man/3/printf

于 2008-08-20T13:48:14.217 回答
2

10.1f 表示浮点数,10 个字符宽,小数点后一位。如果数字少于 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)。

于 2008-08-20T13:53:08.247 回答
2

10.1f 表示浮点数,小数点后1 位,小数点前10 位。如果数字少于 10 位,则用空格填充。10.2f 相同,但小数点后有 2 位。

在我见过的每个系统上,从 Unix 到 Rails 迁移,情况都不是这样。@robintw 表达得最好:

基本上以简单的形式,它是 %[width].[precision][type]。

即,不是“小数点10位”,而是“包括小数点在内,前后各 10 位”。

于 2008-08-20T15:17:26.280 回答
1

简而言之,% 之后的那些值告诉printf如何解释(或输出)后面的所有变量。在您的示例中,radius被解释为浮点数(此为“f”),并10.1提供有关在打印时使用多少小数位的信息。

有关可与 printf 一起使用的所有修饰符的更多详细信息,请参阅此链接。

于 2008-08-20T13:51:18.733 回答
0

10.1f表示你想显示一个带有1个小数的浮点数,显示的数字应该是10 个字符长。

于 2008-08-20T13:50:37.690 回答
0

手册页包含您想要的信息。要阅读上面的内容:

printf( "%10.2f", 1.5 )

这将打印:

         1.50

然而:

printf("%.2f", 1.5 )

印刷:

1.50

注意两者的理由。相似地:

printf("%10.1f", 1.5 )

将打印:

        1.5

之后的任何数字。是您要打印的精度。之前的任何数字。是距左边距的距离。

于 2008-08-20T13:51:59.590 回答
-1

其他人没有提出的一个问题是double是否与float相同。在某些系统上,与浮点数相比,双精度数需要不同的格式说明符。尤其是因为传递的参数可能具有不同的大小。

%f - 浮动
 %lf - 双倍
 %g - 双倍

于 2008-08-23T11:00:49.087 回答