gpt4 book ai didi

c - C printf %e 如何控制 'e' 后的指数位数?

转载 作者:太空狗 更新时间:2023-10-29 17:02:55 24 4
gpt4 key购买 nike

我想在 C printf %e 中控制 'e' 后的指数位数?

比如C printf("%e")结果2.35e+03,但是我想要2.35e+003,我需要 3 位指数,如何使用 printf

代码:

#include<stdio.h>
int main()
{
double x=34523423.52342353;
printf("%.3g\n%.3e",x,x);
return 0;
}

结果: http://codepad.org/dSLzQIrn

3.45e+07
3.452e+07

我要

3.45e+007
3.452e+007

但有趣的是,我在 Windows 中使用 MinGW 得到了正确的结果。

最佳答案

"...The exponent always contains at least two digits, and only as many more digits as necessary to represent the exponent. ..." C11dr §7.21.6.1 8

所以 3.45e+07 是合规的(OP 不想要的)而 3.45e+007 是不合规的(OP 想要的)。

由于 C 没有为代码提供改变指数位数的标准方法,因此代码只能自行解决。

各种编译器支持一些控制。

visual studio _set_output_format

为了好玩,下面是DIY代码

  double x = 34523423.52342353;
// - 1 . xxx e - EEEE \0
#define ExpectedSize (1+1+1 +3 +1+1+ 4 + 1)
char buf[ExpectedSize + 10];
snprintf(buf, sizeof buf, "%.3e", x);
char *e = strchr(buf, 'e'); // lucky 'e' not in "Infinity" nor "NaN"
if (e) {
e++;
int expo = atoi(e);
snprintf(e, sizeof buf - (e - buf), "%05d", expo); // 5 more illustrative than 3
}
puts(buf);

3.452e00007

另见 c++ how to get "one digit exponent" with printf

关于c - C printf %e 如何控制 'e' 后的指数位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31331723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com