以前真没注意过,今天同事提出来测试了一下才发现。
不在对象内的浮点变量强制转换的时候是正常的,如
float a=0.02;
int b=(int)(a*100);
结果 b=2
但是如果float a 是C++类中的属性变量的时候如
class c
{
float a;
}
这样的话 int b=(int)(new c()->a*100);
结果 B=1;
经检查应该是强制转换的时候四舍五入没取大值的原因,加上ceil()函数就可以了(int)(ceil(new c()->a*100))
-----------------------------------------------------------------------------------------------------------------------
根据反编译发现最后都是通过ftol2_sse或者ftol2内置函数来进行浮点到整形的变化。判断如果CPU支持浮点运算就调用ftol2_sse方法,如果不支持用ftol2方法。
如果0.01f*100的话应该是等于1.99..的数值,ftol2取整的话直接取>0的整数部分没有四舍五入。