我想控制C中'e'后的指数位数printf %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;
}
Run Code Online (Sandbox Code Playgroud)
结果: http ://codepad.org/dSLzQIrn
3.45e+07
3.452e+07
Run Code Online (Sandbox Code Playgroud)
我想要
3.45e+007
3.452e+007
Run Code Online (Sandbox Code Playgroud)
但有趣的是,我在Windows中使用MinGW获得了正确的结果.
"......指数始终包含至少两位数字,并且只需要表示指数的数字."C11dr§7.21.6.18
因此3.45e+07
符合(OP不想要的)并且3.45e+007
不符合(OP想要的).
由于C没有提供代码来改变指数位数的标准方法,因此代码可以自行维持.
各种编译器支持一些控制.
为了好玩,以下是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
Run Code Online (Sandbox Code Playgroud)