#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double b, c = 0;
int n = 1;
while (n < 10000)
{
b = 1.0 /(n * n);
c = c + b;
n ++;
}
b = sqrt(c * 6);
cout<<"d的值:"<< b <<endl;
printf("%lf\n",b);//6位
printf("%.10lf\n", b);//10位
printf("%.15lf\n", b);//15位
return 0;
}
把 int都换成float或者double试试
#include<bits/stdc++.h>
using namespace std;
int main(){
int a = 1;
//用浮点数计算
float b,d,c=0;
while(a<10000){
a++;
//a*a
b = 1.0/ (a*a);
c = c + b;
}
//放循环外
d = sqrt((c+1) * 6);
cout<<"d 的值:"<<d<<endl;
return 0;
}
这个问题的主要原因是C/C++中的除法符号/
,如果它的两侧都是int
整数类型,那么除法结果也是整数,相当于直接去小数点。
第17行:b = 1 / ((a + 1) * (a + 1))
不管右边的a
是多少,b永远是0。因为被除数小于除数,数学运算结果下为0.几,但是在C/C++中直接去除了小数点,所以结果除出来结果是0。
这个问题可以通过显式类型转换来解决,只要除号两侧有一个不是整型就可以:
double
类型)一直输出2是因为c
一直在加b
,而b
一直是0,所以c
一直是2。变量b
、c
、d
在你的代码中都应该定义为double
或者float
类型,这样才能记录小数点。