正负浮点数的C格式代码

时间:2017-07-12 22:39:38

标签: c printf

如何强制printf格式代码(如%f)为正数和负数生成对齐的填充输出。我写了以下玩具程序,这是我问题的一个最小但完整的例子:

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
    int    step =    1;
    float score =  0.1;
    float phi   =  0.1;
    float rho   =  0.2;
    printf(" # score phi  rho\n");
    printf("%2d %2.3f %1.2f %1.2f\n", step, score, phi, rho);

    step++;
    score++;
    phi++;
    rho++;
    printf("%2d %2.3f %1.2f %1.2f\n", step, score, phi, rho);

    step++;
    score -= 1.2;
    phi++;
    rho++;
    printf("%2d %2.3f %1.2f %1.2f\n", step, score, phi, rho);

    return 0;
}

以下是结果:

 # score phi  rho
 1 0.100 0.10 0.20
 2 1.100 1.10 1.20
 3 -0.100 2.10 2.20

我希望有这样的输出

 #  score phi  rho
 1 +0.100 0.10 0.20
 2 +1.100 1.10 1.20
 3 -0.100 2.10 2.20

 # score phi  rho
 1 0.100 0.10 0.20
 2 1.100 1.10 1.20
 3 -0.10 2.10 2.20

我目前的解决方案是使用以{em> score 变量的符号为条件的if-else语句在两个不同的printf语句之间切换;一个带加号,另一个没有。

1 个答案:

答案 0 :(得分:2)

遵循format specification syntax,遵循printf转换规范

%[flags][width][.precision][size]type

因此,如果将标志指令设置为+,则符号(+或-)会显示为输出值的前缀。例如,

printf("%+5.2f\n%+5.2f\n", -19.86, 19.86); // prints -19.86 \newline +19.86