How to control the number of exponent digits after ‘e’ in C printf %e?

“…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

So 3.45e+07 is compliant (what OP does not want) and 3.45e+007 is not compliant (what OP wants).

As C does not provide a standard way for code to alter the number of exponent digits, code is left to fend for itself.

Various compilers support some control.

visual studio _set_output_format

For fun, following is DIY code

  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

Also see c++ how to get “one digit exponent” with printf

Leave a Comment