为什么printf没有使用科学记数法?

时间:2014-01-22 16:06:07

标签: c printf pow

我知道这是一个常见的问题。但是我找不到一个可靠的直接答案。

16 ^ 54 = 1.0531229167e+65 (this is the result I want)

当我使用pow(16,54)时,我得到:

  

105312291668557186697918027683670432318895095400549111254310977536.0

代码如下:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

void main(){

   double public;
   double a = 16;
   double b = 54;
   public = (pow(a,b));

   printf("%.21f\n", public);
}

执行代码:

  

gcc main.c -lm

我做错了什么?

3 个答案:

答案 0 :(得分:19)

  

我做错了什么?

有几件事:

  • 使用%.10e格式将科学记数法与printf一起用于点后十位数的打印输出,
  • int
  • 返回main
  • 考虑不使用public来命名变量,因为您的程序需要移植到C ++,其中public是关键字。

以下是修复程序的方法:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(){

   double p;
   double a = 16;
   double b = 54;
   p = (pow(a,b));

   printf("%.10e\n", p);
   return 0;
}

Demo on ideone.

答案 1 :(得分:8)

你试过了吗?

printf("%e\n", public);

%e说明符用于科学记数法,described in the documentation

答案 2 :(得分:3)

如果您需要科学记数法,则需要使用%e format specifier

printf("%e\n", public);
        ^^   

此外,public是C ++中的keyword,因此,在此代码需要可移植的情况下,最好避免使用此类关键字