我已经搜索了一下,但我没有得到一个特别直接的答案。在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
?有人可以解释一下吗?
答案 0 :(得分:15)
http://en.wikipedia.org/wiki/Printf#printf_format_placeholders是维基百科对printf格式占位符的参考。 http://www.cplusplus.com/reference/clibrary/cstdio/printf.html也很有帮助
基本上以简单的形式,它是%[宽度]。[精度] [类型]。宽度允许您确保正在打印的变量至少是一定长度(对表等有用)。精度允许您指定打印数字的精度(例如小数位等),并告知C / C ++您给出的变量是什么(字符,整数,双精度等)。
希望这有帮助
<强>更新强>
使用您的示例澄清:
printf( "%10.1f %10.2\n", radius, area );
%10.1f(指第一个参数:radius)表示将其设置为10个字符(即带空格的pad),并将其打印为带有一个小数位的浮点数。
%10.2(指第二个参数:area)表示使其长10个字符(如上所示)并打印两个小数位。
答案 1 :(得分:7)
man 3 printf
Linux系统上的将为您提供所需的所有信息。您也可以在线查找这些手册页,例如http://linux.die.net/man/3/printf
答案 2 :(得分:2)
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)中列出了其他几个。
答案 3 :(得分:2)
10.1f表示小数点后1位和小数点前10位的浮点。如果数字少于10位,则用空格填充。 10.2f是相同的,但在小数点后面有2个位置。
在我看过的每个系统上,从Unix到Rails迁移,情况并非如此。 @robintw表达得最好:
基本上是一个简单的形式,它是%[宽度]。[精度] [类型]。
也就是说,不是“在小数点之前的10个地方”,而是“10个地方,之前和之后,包括小数点。”
答案 4 :(得分:1)
简而言之,%告诉printf
之后的那些值如何解释(或输出)以后出现的所有变量。在您的示例中,radius
被解释为float(这是'f'),而10.1
提供了有关打印时要使用的小数位数的信息。
有关可以与printf一起使用的所有修饰符的详细信息,请参阅this link。
答案 5 :(得分:0)
10.1f 表示您希望显示 1 小于1的 1 ,并且显示的数字应 10 字符长。
答案 6 :(得分:0)
手册页包含您想要的信息。阅读以上内容:
printf( "%10.2f", 1.5 )
这将打印:
1.50
鉴于:
printf("%.2f", 1.5 )
打印:
1.50
注意两者的理由。 类似地:
printf("%10.1f", 1.5 )
会打印:
1.5
之后的任何数字。是你想要打印的精度。之前的任何数字。是左边距的距离。
答案 7 :(得分:-1)
其他人未提出的一个问题是 double 是否与 float 相同。在某些系统上,与float相比,double需要不同的格式说明符。尤其是因为传递的参数可能具有不同的大小。
%f - float %lf - double %g - double