假设现在有这样一个需求,将double类型的数据转成float,由于C++并不会执行隐式类型转换,因此一般的做法是用float强制转换。
示例如下:
float b = (float) a; //a是double类型
看上去这个转换人畜无害,但请见下面示例:
可以看到,a原来是463440.620,而转成float类型,变成了463440.625,损失了相当的精度。
结论究其原因,其实是float用32位存储,只能保证6 ~7位的有效数字,而double是64位,能保证15 ~ 16位的有效数字。C++的隐式类型转换能从float转double(不会出现精度损失),但从double转float的强制类型转换可能会出现精度损失,使用时需要格外注意。



