打印浮在两边最多四个位置

时间:2018-07-24 06:41:27

标签: c floating-point printf

我是新手,我正在尝试将float值最多打印到两侧的四个位置。例如,11.3将是0011.3000。为此,我使用以下行:-

float t = 11.3;
printf("%4.4f", t);

但是我得到11.3000。所以,甚至有可能我要做什么?如果是,那怎么办?谢谢

3 个答案:

答案 0 :(得分:5)

您的代码段中f的类型不正确,应该为floatdouble

要产生前导零,请使用0 printf修饰符并指定期望的最小宽度,在您的示例中为9个字符(在.加上.之前的4个位置.之后再加上4个地方。

因此格式为%09.4f

代码如下:

#include <stdio.h>

int main() {
    double t = 11.3;
    printf("%09.4f\n", t);
    return 0;
}

输出:

0001.3000

但是请注意,如果数字为负数,则您只会在.之前获得3个位置,并且该数字的绝对值太大(<= {-999.99995或> = {{1} }),输出将超过9个字符。如果您也想在9999.99995之前也有4个负值位置,则应使用.:如果该数字为正,则数字前面将带有一个空格,如果为负,则数字之前将带有一个% 010.4f:< / p>

-

输出:

#include <stdio.h>

int main() {
    double t = 11.3;
    printf("%09.4f\n", t);
    printf("% 010.4f\n", t);
    printf("% 010.4f\n", -t);
    return 0;
}

答案 1 :(得分:2)

格式规范的第一部分是您要打印的字段的宽度,而不是小数点前的位数。所需的输出中有9个字符,左侧有零填充,所以

float t = 11.3;
printf("%09.4f", t);

例如,如果数字的整数部分太大,则可能会崩溃。为了更好地控制水平,请使用整数:

float t = 11.3;
int i, f;
i = (int)t;
f = (int)((t - i) * 10000 + 0.5);
printf("%04d.%04d", i, f);

所有这些假设为正数。此处显示的两个示例都不能与否定词一起正常工作。

答案 2 :(得分:2)

float t = 11.3;
printf("%4.4f", t);

在您的代码中,前4个。表示要打印的字符总数。 和后跟4。表示小数点后的字符数。 由于您需要xxxx.xxxx,因此您应该这样写:

printf("%9.4f", t);