关于语言内置类型的转换,平时写代码都是直接强转,有显式的,有隐式,一般都是不会出现问题。但是,这次确是遇到了一个问题,具体原有还是跟浮点数使用二进制表示法有关,有些数很难直接表示出来,就像代数中的1/3的结果永远表示不完一样。
上面就上代码(VS2010 win7 32位)
int main()
{
double f1 = 8.45;
double f2 = f1;
int i1 = (int)(f2 * 100);
printf("%d", i1);
}
输出的结果:844
通过vs的监视器查看
解决方法是在转整形之前加上正负0.000001
浮点数二进制表示可参考 阮一峰的浮点数的二进制表示http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html