C 打印浮动,每侧最多四处

C 打印浮动,每侧最多四处,c,floating-point,printf,C,Floating Point,Printf,我是新手,我试图打印一个float值,每边最多四个位置。例如,11.3将是0011.3000。为此,我使用以下行:- float t = 11.3; printf("%4.4f", t); 但是我得到了11.3000。那么,我到底想做什么呢?如果是,那怎么办?谢谢您的代码片段中f的类型不正确,应该是float或double 要产生前导零,请使用0printf修饰符,并在示例中指定所需的最小宽度,即9个字符(示例中前面的4个位置加上后面的4个位置) 因此,格式为%09.4f 代码如下: #inc

我是新手,我试图打印一个
float
值,每边最多四个位置。例如,
11.3
将是
0011.3000
。为此,我使用以下行:-

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

但是我得到了
11.3000
。那么,我到底想做什么呢?如果是,那怎么办?谢谢您的代码片段中
f
的类型不正确,应该是
float
double

要产生前导零,请使用
0
printf
修饰符,并在示例中指定所需的最小宽度,即9个字符(示例中
前面的4个位置加上
后面的4个位置)

因此,格式为
%09.4f

代码如下:

#include <stdio.h>

int main() {
    double t = 11.3;
    printf("%09.4f\n", t);
    return 0;
}
但是请注意,如果该数字为负数,则在
之前只会有3个位置,如果该数字的绝对值太大(
9999.99995
),则输出将超过9个字符。如果您想在
前面也有4个位置表示负值,则应使用
%010.4f
:如果为正值,则数字的前缀将为空格,如果为负值,则前缀为
-

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

代码片段中的
f
类型不正确,应该是
float
double

要产生前导零,请使用
0
printf
修饰符,并在示例中指定所需的最小宽度,即9个字符(示例中
前面的4个位置加上
后面的4个位置)

因此,格式为
%09.4f

代码如下:

#include <stdio.h>

int main() {
    double t = 11.3;
    printf("%09.4f\n", t);
    return 0;
}
但是请注意,如果该数字为负数,则在
之前只会有3个位置,如果该数字的绝对值太大(
9999.99995
),则输出将超过9个字符。如果您想在
前面也有4个位置表示负值,则应使用
%010.4f
:如果为正值,则数字的前缀将为空格,如果为负值,则前缀为
-

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

格式规范的第一部分是要打印的字段的宽度,而不是小数点前的位数。您想要的输出中有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);

所有这些假设都是正数。此处显示的两个示例都不能正确处理负片。

格式规范的第一部分是要打印的字段的宽度,而不是小数点前的位数。您想要的输出中有9个字符,在左边填充零,也可以这样做

float t = 11.3;
printf("%09.4f", t);
float t = 11.3;
printf("%4.4f", t);
例如,如果数字的整数部分变得太大,无法进行更精细的控制,则可能会出现故障,请使用整数:

float t = 11.3;
int i, f;
i = (int)t;
f = (int)((t - i) * 10000 + 0.5);
printf("%04d.%04d", i, f);
所有这些假设都是正数。这里显示的两个示例都不能正确处理负片

float t = 11.3;
printf("%4.4f", t);
在上述代码中,4之前。表示要打印的字符总数。 小数点后的平均字符数。 因为您想要xxxx.xxxx,所以您应该这样写:

printf("%9.4f", t);
在上述代码中,4之前。表示要打印的字符总数。 小数点后的平均字符数。 因为您想要xxxx.xxxx,所以您应该这样写:

printf("%9.4f", t);

%04.4f
,iirc,产生领先的zeroes@collapsar,不行不行不行,兄弟
%09.4f
可能会更好。9表示“在一个9个字符宽的字段中打印”,第一个数字是字段的总大小,第二个是精度。您需要的是“%09.4f”。
%04.4f
,iirczeroes@collapsar,不行不行不行,兄弟
%09.4f
可能会更好。9表示“在一个9个字符宽的字段中打印”,第一个数字是字段的总大小,第二个是精度。您想要的是“%09.4f”。谢谢,先生,但不需要双倍。至少在我的情况下,浮动也是如此working@TabishSaifullah:如果您愿意,可以将
f
声明为
float
,而无需任何其他修改。然而,使用
float
并不会节省太多:
float
值在传递到
printf
时会转换为
double
。除了在计算能力较低的嵌入式系统上,它们的精度要低得多,速度也不比double快。如果您的平台是普通PC,我建议对所有浮点计算使用
double
。@chqrlie:在许多情况下,
float
性能比现代通用处理器上的
double
快。除法和平方根通常更快,即使加法、减法和乘法相同。库例程(如余弦和对数)在
float
版本中通常比在
double
中更快。手动或自动矢量化的代码在float中的速度可能是原来的两倍。反过来,这意味着诸如FFT、BLAS或其他数组处理例程之类的例程将更快。当然,数据越小,内存复制的速度就越快。谢谢,先生,但不需要加倍。至少在我的情况下,浮动也是如此working@TabishSaifullah:如果您愿意,可以将
f
声明为
float
,而无需任何其他修改。然而,使用
float
并不会节省太多:
float
值在传递到
printf
时会转换为
double
。除了在计算能力较低的嵌入式系统上,它们的精度要低得多,速度也不比double快。如果您的平台是普通PC,我建议对所有浮点计算使用
double
。@chqrlie:wh中有多种情况