代码 #include <stdio.h>
void main
{
double a,b,c;
int d;
b=3.3;
c=1.1;
a=b/c;
d=b/c;
printf("%f,%d",a,d);
if (3.0!=a);
printf("\nreally? 3.0!=a");
}
结果 3.000000,2
really? 3.0!=a
求a和d的值,问为什么结果不一样
#include<stdio.h>
void main()
{
double a,b,c;
int d;
b=3.3;
c=1.1;//初始值。
a=b/c;//a=3.3/1.1=3.0
d=b/c;//d=3.3/1.1=3
printf("%f,%d",a,d);
//这里要用%lf
//理论输出值 应为3.000000, 3
if(3.0!=a)
printf("\nreally? 3.0!=a");
return 0;
}
如果输出实际d值为2,
那么唯一的可能就是浮点数精度问题。
3.3/1.1得到3.0 实际上被存成了2.99999...
这样一个接近3的近似值。 然后转为整型时,取整数部分为3。
希望对题主有所帮助,可以的话,帮忙点个采纳!
浮点数在计算机底层的存储逻辑可以百度一下:
然后,要知道d定义为int类型,计算机里可没有四舍五入之说,而是直接取整数位,即即使d为2.9,也当成2
涉及到就是double类型的计算以及double类型的比较技巧:
可以参考:
//差值在自己能接受的一个误差范围内就好
bool equal(double a,double b){
return fabs(a-b)<0.000001;
}