相关疑难解决方法(0)

C中%g和%f之间有什么区别?

我正在通过K&R的C编程语言.这里在一个打印双变量的语句中写了

printf("\t%g\n", sum += atof(line));
Run Code Online (Sandbox Code Playgroud)

其中sum被声明为double.任何人都可以帮我解决何时使用%g的情况下双倍或浮动的情况,以及%g和%f之间的差异.

c variables

26
推荐指数
3
解决办法
9万
查看次数

%g printf说明符的确切含义是什么?

%g说明符似乎并不在多数来源记录它运行得的方式行事.

根据我发现的大多数来源,在使用printf说明符的多种语言中,说明%g符应该等同于%f或者%e- 对于提供的值产生较短的输出.例如,在撰写此问题时,cplusplus.com表示说明g符意味着:

使用最短的表示:%e%f

PHP手册说这意味着:

g - %e%f中的较短者.

而且这里有一个堆栈溢出的答案是声称,

%g 使用最短的表示.

Quora的回答声称:

%g 以这两个表示中最短的方式打印数字

但这种行为不是我在现实中看到的.如果我编译并运行该程序(作为C或C++ - 它是一个在两者中具有相同行为的有效程序):

#include <stdio.h>

int main(void) {
    double x = 123456.0;
    printf("%e\n", x);
    printf("%f\n", x);
    printf("%g\n", x);
    printf("\n");

    double y = 1234567.0;
    printf("%e\n", y);
    printf("%f\n", y);
    printf("%g\n", y);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

...然后我看到这个输出:

1.234560e+05
123456.000000
123456

1.234567e+06
1234567.000000
1.23457e+06
Run Code Online (Sandbox Code Playgroud)

显然, …

c language-agnostic floating-point printf format-specifiers

7
推荐指数
1
解决办法
1388
查看次数