在Dev-C++ 5.11上同一种写法,一个数据四舍五入了,一个没有四舍五入,为什么会这样呀
#include
#define PI 3.14
int main()
{
double r,h;
scanf("%lf %lf",&r,&h);
printf("C1=%.2f\n",PI2r);
printf("Sa=%.4f\n",PIrr);
printf("Sb=%.2f\n",PIrr4);
printf("Va=%.2f\n",PIrrr4/3);
printf("Vb=%.4f\n",PIrrh);
return 0;
}
输入1.5 3
输出为
C1=9.42
Sa=7.0650
Sb=28.26
Va=14.13
Vb=21.1950
#include
#define PI 3.14
int main()
{
double r,h;
scanf("%lf %lf",&r,&h);
printf("C1=%.2f\n",PI2r);
printf("Sa=%.2f\n",PIrr); //这里不同,4改为了2
printf("Sb=%.2f\n",PIrr4);
printf("Va=%.2f\n",PIrrr4/3);
printf("Vb=%.2f\n",PIrrh); //这里也不同,4也改为了2
return 0;
}
输入1.5 3
输出为
C1=9.42
Sa=7.06 //这里没有四舍五入
Sb=28.26
Va=14.13
Vb=21.20 //这里四舍五入了
因为浮点数在内存里二进制表示是有截断误差的,如下图,3.14用double类型表示实际上是3.1400000000000001,而PI * r * r
的计算结果是7.0649999999999995,按四舍五入保留两位小数就得到7.06(相应的误差范围是±0.005)
emmm,你这看的太乱了,程序截个图看看