关于c语言里%m.nf的问题
首先实验了一下
#include <stdio.h>
int main()
{
float x=5.4526;
printf("%.2f\n\n",x);
printf("%2f\n",x);
printf("%9f\n\n",x);
printf("%2.1f\n",x);
printf("%5.1f\n",x);
printf("%10.1f\n",x);
printf("%10.2f\n\n",x);
printf("%05.1f\n",x);
return 0;
}
结果分别是
5.45
5.452600
5.452600
5.5
5.5
5.5
5.45
005.5
不难发现
float x=5.4526;
printf("%.2f\n",x);
".nf "就是保留小数点几位;
“%mf”的情况有两种,注意浮点型变量默认小数点后6位,小数点也占一个位
1.m(表示我们设置的宽度)<=实际数值的宽度,这里我写的2f,结果直接输出实际数值,得到第二个结果;
float x=5.4526;
printf("%2f\n",x);
2.m>实际数值的宽度,我们发现结果自动在其左侧添加了一个空格,得到第三个结果;
float x=5.4526;
printf("%9f\n",x);
对于“m.nf”的情况
float x=5.4526;
printf("%5.1f\n",x);
输入上述代码,运行后发现,结果是“ 空空5.5” 总共5个宽度:在保留一位小数的情况下已经有小数后一位+标点+个位数 总共3个位置,剩下的只能由空格放在其左侧补足。其实这里就是将“%mf”和“%.nf”的情况结合起来。
接着我们再试几个,再次印证。
printf("%2.1f\n",x);
printf("%10.1f\n",x);
printf("%10.2f\n\n",x);
5.5
5.5
5.45
我们的思路是:先看保留几位小数,再+小数点,再+整数部分位数=sum
两个结果:
1.sum< m,此时需要在其左侧补足m-sum个空格,再顺位输出。
2.sum>=m,此时并不需要补足空格,直接按照实际数值保留位数输出。
那只有补足只能是空格嘛?
printf("%05.1f\n",x);
输出:005.5
我们稍微转变一下,在"5.1f"前添加一个0,结果就变成了“005.5”,在数字左侧添加2个0,而不是空格。
如有错误,请指正!谢谢!