float浮点型变换为int整型数据失真

float浮点型转换为int整型数据失真
工作中遇到的问题 具体为题如下所示:
  float a=4.99
  a=a*100;
  int b=(int)a;
  调试的结果
  a=499;
  b=498;
麻烦帮小弟想想办法避免这个错误;

下面是我工作的代码,目的是计算数值的小数位数
float temp =4.99;
int xiaoshuweishu=0;
while (temp-(int)temp>0.0000000001)
{
  temp=temp*10;
  xiaoshuweishu++;
}



------解决方案--------------------
float temp =4.99;// 楼主所谓的失真源于这一步

三进制的0.1换算成十进制就是0.333333333333……
十进制的有限小数换算成二进制,大多都是无限循环小数
0.99换算成有理分数为99/100,分母100中含有因子5,因此0.99无法被转换成二进制有限小数,不管是float还是double,都不可能精确保存它
要精确保存小数,唯一可靠的方法就是把它的小数点后各位作为整数来保存

while ( temp-(int)(temp + 0.000001 ) > 0.000001 )
这种写法可能能够满足楼主的要求,但不可靠
float的有效数据位数是6~7位,上面的0.000001这个所谓的极小值不能保证绝对可靠

------解决方案--------------------
C/C++ code
float a=4.99f;
a=a*100.0f;
int b=(int)(a+0.5f);
printf("a=%.0f,b=%d\n",a,b);//a=499,b=499

------解决方案--------------------
C/C++ code

float f=4.99;
printf("%.32f\n",f);
f = f*100;
printf("%.32f\n",f);

4.98999977111816410000000000000000
498.99996948242187000000000000000000