我想控制C中'e'后面的指数位数printf %e
?
例如,Cprintf("%e")
result 2.35e+03
, 但我想要2.35e+003
,我需要3位指数,我该如何使用printf
?
Code:
#include<stdio.h>
int main()
{
double x=34523423.52342353;
printf("%.3g\n%.3e",x,x);
return 0;
}
Result:
http://codepad.org/dSLzQIrn http://codepad.org/dSLzQIrn
3.45e+07
3.452e+07
I want
3.45e+007
3.452e+007
但有趣的是,我在 Windows 中使用 MinGW 得到了正确的结果。
“...指数始终包含至少两位数字,并且仅包含表示指数所需的更多数字。...” C11dr §7.21.6.1 8
So 3.45e+07
是合规的(OP不想要的)并且3.45e+007
不合规(OP想要的)。
由于 C 没有为代码提供改变指数位数的标准方法,因此代码只能自行解决。
各种编译器都支持某些控制。
视觉工作室_set_output_format https://learn.microsoft.com/en-us/cpp/c-runtime-library/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 ++如何使用printf获得“一位数字指数” https://stackoverflow.com/questions/8773133/c-how-to-get-one-digit-exponent-with-printf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)