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

后端 未结 3 879
眼角桃花
眼角桃花 2020-11-27 21:53

I want to control the number of exponent digits after \'e\' in C printf %e?

For example, C printf(\"%e\") result 2.35e+03, but

3条回答
  •  攒了一身酷
    2020-11-27 22:18

    "...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

提交回复
热议问题