C语言中3位小数,共12位怎么设置居中

img


一共12位,设置居中

先将小数转成字符串,判断字符串的长度,然后根据长度在字符串左侧和右侧添加空格。
参考如下代码:

#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;
}