printf()的参数格式如下所示
%[flags][width][.precision][size]type
其中,第三个域[.precision]表示精度,是由一个小数点和一个非负的十进制数(precision)组成。
1 指定输出字符串中字符的个数
当输出的是字符串时,[.precision]中的precision表示输出的字符串中字符的个数。
printf("%.5s", "HelloWorld");
以上代码表示输出字符串的前5个字符,此时输出为“Hello”。
需要注意的是,在《C++中printf()函数的用法10-8》中提到的[width]宽度域,不会影响输出的字符个数,即
printf("%5s", "HelloWorld");
此时输出为“HelloWorld”。
当precision的值大于要输出的字符串长度时,此时输出为这个字符串。
printf("%.20s", "HelloWorld");
此时的输出为“HelloWorld”。
2 指定输出的小数位的个数
当输出的是浮点数时,[.precision]中的precision表示输出的浮点数的小数位数。
printf("%.5f",1.123456789);
以上代码表示输出5个小数位,此时的输出为1.12346,即在截断的同时进行了四舍五入的处理。
3 [width]域与[.precision]域共同作用
[width]域指定了输出的宽度,而[.precision]域指定了输出字符的数量。
printf("%10.5s","HelloWorld");
以上代码表示输出的5个字符,但是其宽度是10个字符,即此时的输出为“ Hello”。当[.precision]域指定的输出字符数量大于[width]域指定了输出的宽度的宽度时,以[.precision]域为准。
printf("%1.5s","HelloWorld");
此时的输出为“Hello”。当使用这两个域来输出浮点数时,其使用方法与输出字符串相同。
4 [.precision]域中有星号
当 [.precision]域中的precision是*时,需要在printf()函数的参数中添加一个整数值来表示精度,这个参数位于要显示的数之前。
printf("%.*s", 5, "HelloWorld");
此时,显示的内容是“Hello”。
5 默认精度
当输出浮点数并且没有指定精度时,此时默认精度是6位。
printf("%f", 1.123456789);
此时的输出是1.123457,可以看出截断的同时进行了四舍五入。