关于语言内置类型的转换,平时写代码都是直接强转,有显式的,有隐式,一般都是不会出现问题。但是,这次确是遇到了一个问题,具体原有还是跟浮点数使用二进制表示法有关,有些数很难直接表示出来,就像代数中的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
浮点数二进制表示可参考 阮一峰的浮点数的二进制表示