使用long double类型数据计算显示0

本来想通过换一个数据类型,从double换成long double来增加计算精度(不过后来发现double已经够了),结果发现计算结果都为零?

#include
#include
#define pai 3.141592
int main(void)
{
  double r;
   double area;
   double volumn;

  scanf("%lf",&r);
  printf("%lf\n",r);//打印出来为检验r是否正确输入了


  area = 4*pai*r*r;
  volumn = (4*pai*pow(r,3))/3;

  printf("%.6lf\n%.6lf",area,volumn);

 return 0;
}
运行结果:
输入:2
输出: 2.000000
          50.265472
           33.510315
Process returned 0 (0x0)   execution time : 1.165 s
Press any key to continue.


转换成long double后

#include
#include
#define pai 3.141592
int main(void)
{
  double r;
  long double area;
  long double volumn;

  scanf("%lf",&r);
  printf("%lf\n",r);


  area = 4*pai*r*r;
  volumn = (4*pai*pow(r,3))/3;

  printf("%.6lf\n%.6lf",area,volumn);

 return 0;
}

输入:2(以下为输出)
2.000000
0.000000
0.000000
Process returned 0 (0x0) execution time : 2.131 s
Press any key to continue.

无论输入什么数字,下面两个计算结果都为0.为什么会这样呢

long double用%llf吧

img


在VS2010下正常的啊

代码没问题啊,我试了一下可以运行出你要的结果,你可以发一下你运行的图片出来看看

long double不同的编译器有不同的处理方式,换成大写L试试:scanf("%Lf", &r); printf("%Lf\n", r);