代码之家  ›  专栏  ›  技术社区  ›  Philip.W

在C中格式化类似xxxxE+xx的双精度

  •  0
  • Philip.W  · 技术社区  · 6 年前

    如何将类似12345.0的双精度打印为1.234E+04? 我想打印这样的内容:

    int N = 1024;
    int time = 3476;
    printf("%f", (N/time));
    

    其中输出为: 3.394531E+00

    3 回复  |  直到 6 年前
        1
  •  1
  •   Mihayl    6 年前

    你可以使用 float 对于您的变量或将某些变量转换为浮点类型,如下所示:

    printf("%f", ((float)N/time));
    

    如果你想让你的数字一直在 科学记数法 http://www.cplusplus.com/reference/cstdio/printf/ 您可以将格式替换为“%e”。

    值得注意的是 printf 期望 double 默认情况下,所有 f F e E g G a A .

        2
  •  0
  •   chux - Reinstate Monica    6 年前

    正如其他人的评论和回答 @Some programmer dude :使用浮点数学而不是整数数学执行除法。

    确保正确 a/b vs b/a 实现“输出为:3.394531E+00”

    使用 "%.nE" 格式(其中 n 是进动)以指数表示法打印。 "%E" 独自行动 "%.6E" .

    "%e" 就像 %E“ 除非is使用 'e' vs。 'E' 在输出中。

    #include <stdio.h>
    
    int main(void) {
      int N = 1024;
      int time = 3476;
      printf("%.6E\n", 1.0*N/time);
      printf("%.6E\n", 1.0*time/N);
      printf("%.3E\n", 12345.0);
      return 0;
    }
    

    输出

    2.945915E-01
    3.394531E+00
    1.234E+04
    
        3
  •  0
  •   Déjà vu    6 年前

    首先,需要避免整数除法。铸造 N 例如,到双精度(那么除法将使用小数)。

    并使用 %e 格式( %E 对于大e),对于6位小数:

    printf("%.6E", (double)N/time);