#include
int main()
{
double a,b,e=0,d=1;
int c,f=0,g;
scanf("%lf",&a);
c=int(a);
b=a-c;
while(c!=0)
{
if(c%2==1)
e=e+d;
d=d*2;
c=c/10;
}
d=1;
while(b!=0&&f!=8)
{
b=b*10;
printf("%f ",b);
if(int(b)==1)
{
e=e+d;
b=b-1;
}
d=d/2;
f++;
}
printf("%lf",e);
}
如果输入111.101的话出来的是7.5 其他的都正常 怎么回事,为什么有的时候int(b)==1判断不了?
因为浮点数大部分都无法精确存储。
比如0.9可能在内存中存储的是0.8999999,你用int强转的时候可能会丢失精度
printf("%f ",b);改成 printf("%.16f ",b);建议多打印几位就清楚了
楼主这里之所以等于7.5是因为,1+2+4+0.5,本来应该还有个0.125,但是由于精度问题,打印出的b虽然是1,但实际存储的是0.99999999
所以int(b)就变成0