c++对象内浮点数强制转换成整数时数值不对的问题

以前真没注意过,今天同事提出来测试了一下才发现。

不在对象内的浮点变量强制转换的时候是正常的,如 

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的整数部分没有四舍五入。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值