先将小数转成字符串,判断字符串的长度,然后根据长度在字符串左侧和右侧添加空格。
参考如下代码:
#include <stdio.h>
#include <string.h>
/**@将浮点型转成制定长度的字符串,数字居中,两侧加空格
* @param[in] a 需要转换的浮点型
* @param[in] x 需要保留的小数位数
* @param[in] len 字符串总长度
* @param[in/out] buf 存储转换后的字符串,空间要求足够大
*/
void transftostring(float a,int x,int len,char buf[])
{
int i,lg,lg2;
switch(x)
{
case 0:
sprintf(buf,"%.0f",a);break;
case 1:
sprintf(buf,"%.1f",a);break;
case 2:
sprintf(buf,"%.2f",a);break;
case 3:
sprintf(buf,"%.3f",a);break;
case 4:
sprintf(buf,"%.4f",a);break;
case 5:
sprintf(buf,"%.5f",a);break;
default:
sprintf(buf,"%f",a);break;
}
printf("%s\n",buf);
lg = strlen(buf);
if(lg >= len) //如果转换后的字符串长度已经大于总长度,那么按实际长度输出
return;
else
{
lg2 = (len - lg)/2;
//字符串后移lg2位
for(i = lg-1;i>=0;i--)
buf[i+lg2] = buf[i];
//前面补空格
for(i=0;i<lg2;i++)
buf[i]= ' ';
//后面补空格
for(i=0;i<len - lg - lg2;i++)
buf[lg+lg2+i] = ' ';
//最后字符设置为0
buf[lg+lg2+i] = '\0';
}
}
int main()
{
float s = 1.234;
char buf[20]={0};
transftostring(s,3,12,buf);
printf("%s",buf);
return 0;
}