C语言 运行结果中为什么双精度实型只输出小数点后六位

n/2=1+1/3+1/3*2/5+1/3*2/5*3/7....,
当最后一项小于输入值的时候,输出n

#include "stdio.h"
double pi(double eps)
{int i=1 ,j=3;
double t=1.0,p=1.0,pi;
while(t>=eps)
{t=t*i/j;
p+=t;
i++;
j+=2;
}
pi=p*2;
return pi;
}
main()
{double p,eps;
scanf("%lf",&eps);
p=pi(eps);
printf("%lf",p);
}

一个常见的题目,为什么我运行了之后输入的数再小,输出也只是3.141590,双精度应该可以输出更多位小数的 啊?
图片审核的时间太久了,还没出来。
问题是:比如我在输入0.0000000000000000000000000000000000000001的时候,输出的结果是35.134971,请问这是为什么?

在C语言中,输出double类型(双精度实型)以及float类型(单精度实型)时,默认输出6位小数。

比如这样的代码:

double a = 1;
printf("%lf\n", a);

输出会是

1.000000

但是有时六位会显得很长,没必要。比如计算平均分,一到两位小数就足够了。

可是有时六位又不够,需要更多位小数,比如计算高精度平方根。

这时可以用printf的格式控制。

如果要输出n位小数,那么可以用%.nlf的格式。其中n为数字。

如要输出10位小数,那么

printf("%.10lf\n", a);

即可


类似的输出1位小数

printf("%.1lf\n", a);

温馨提示:内容为网友见解,仅供参考
第1个回答  2009-03-10
printf("%lf",p);
是一般输出形式默认是 6位吧
你 试试
printf("%.10f",p);
也许就 可以了本回答被提问者采纳
第2个回答  2009-03-10
只输出六位小数,这是默认的,可以改变,如:printf("%6",d)
第3个回答  2009-03-10
楼上的回答是对的,printf要求你输出格式,默认6位小数,你可以指定输出几位
第4个回答  2009-03-10
你可以自己设置输出精度的
printf("%.nf",p); n为你的精度
如:printf("%.6f",p); //输出为小数点后6位

C语言 运行结果中为什么双精度实型只输出小数点后六位
在C语言中,输出double类型(双精度实型)以及float类型(单精度实型)时,默认输出6位小数。比如这样的代码:double a = 1;printf("%lf\\n", a);输出会是 1.000000 但是有时六位会显得很长,没必要。比如计算平均分,一到两位小数就足够了。可是有时六位又不够,需要更多位小数,比如计算高精度平...

c语言float和double保留小数点后几位
c语言float和double保留小数点后6位。C语言中,输出double类型(双精度实型)以及float类型(单精度实型)时,默认输出6位小数(不足六位以0补齐,超过六位按四舍五入截断)。如果想小数点后面16位,写成%.16lf,不会自动四舍五入的,double是一个近似值,通常没有办法做的很精确。通常能精确到小数点...

C语言的double与float类型最多只能默认输出小数位数都取6位?
第九行输出双精度实数,“%8.4lf ”由于指定精度为4位故截去了超过4位的部分。第十行输出字符量d,其中“%8c ”指定输出宽度为8故在输出字符p之前补加7个空格,最后一行输出为12345678.12 这时小数点占一位。

C语言里,实型变量double和float 的输出占位符,%lf和%f为什么在printf输 ...
double精度更高,是指它存储的小数位数更多,但是输出默认都是6位小数,如果你想输出更多小数,可以自己控制,比如 “%.10lf” 就输出10位小数,望采纳

c语言的double 和int的区别,%d和%f的区别
double:双精度实型数,即我们通常意义下的小数,例如1.25、1.37、5.0等。d:这是C语言中scanf用于输入整数的格式,输入整数的格式是scanf("%d",&a)。f:这是C语言中scanf用于输入小数的格式,输入整数的格式是scanf("%lf",&a)。在你的公式C=(F-32)*5\/9计算结果应该为双精度,不能用int...

c语言如何控制输入的数只能保留小数点后六位。例如,我硬是输0.1234568...
这在减小内存开支上面还是有一点用处的,不需要的字符直接跳过,免得申请没用的变量空间 * "宽度"表示输入读入字符的长度,对于整型表示截取相应宽度的数字赋给后面列表中的相应变量;对于字符型表示读入相应长度的字符后把第一个字符赋给相应的变量,其余的自动舍弃。例如scanf("%2d%3d",&a, &b);...

c语言实型变量问题
在C编译系统中,系统默认所有的的浮点型数据为双精度的(也就是double型)。你把一个双精度的数据赋值给一个单精度数据好比把实形数据赋值给整形数据。这样系统就会进行适当的取舍,就会影响到你数据的精度。最终形成了你所说的现象。

C语言中printf区分双精度和单精度吗?为什么用lf输出不了双精度浮点数...
哦,就是用双精度输出1.1吧···好像不论用单精度还是双精度都是保留小数点后六位,只是输出的数表示的范围比单精度大,在单精度可能溢出的数,在双精度下不会溢出···你用电脑是16位,32位还是64位的? 追问 我问题中的程序是用minGW编译的,没有按照期望输出1.132位系统. 更多追问 本回答由提问者推荐 举报...

C语言问题 实型变量问题
1 其实%f%lf都一样,都是输出double类型的。2 当参数即上面的4.0\/3.0被传递到printf时,float总是会被转化成double类型的,然后才能背printf正确输出。3 无论是%f还是%lf,只要不指定 精确度和宽度 ,默认的输出都是 小数点 后跟6位,float和double类型只是决定那后6位有几个是有效数字...

C语言中long double的问题。
long double输出时候要用lf修饰 printf("x=%lf\\n",x);float ,double ,long double默认输出都是小数点后6位,double 和long double 想要输出多的话,可以用格式符来输出 printf("x=%.10lf\\n",x); 这样就能输出小数点后10位。

相似回答