首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

强制类型转换解决方法

2012-05-12 
强制类型转换这两句代码的结果相同吗?第二种写法编译有警告:warning C4244: : conversion from doubl

强制类型转换
这两句代码的结果相同吗?
第二种写法编译有警告:warning C4244: '=' : conversion from 'double' to 'int', possible loss of data

int iH = (int)(rtDest.bottom - rtDest.top)/iRows;
int iH = (double)(rtDest.bottom - rtDest.top)/iRows;

这种强制类型转换,怎么样才能不报警告呢?

[解决办法]
多数情况下结果是一样的,碰到浮点舍入时会有出现差别的可能。

第二个写成:int iH = (int)((double)(rtDest.bottom - rtDest.top)/iRows);试试看
[解决办法]
一般平台上,int和double大小是不一样的。比如windows 32的int是4字节,double是8字节,那么你进行类型转换的话,肯定会丢失某些东西的。
你可以使用:int iH = (int)((double)(rtDest.bottom - rtDest.top)/iRows);来进行申明是自己要求强制类型转换的,那么编译器就进行转换而不通知你了。如果没有(int)的话,编译器认为你忘记了类型是不一样的呢。所以要通知你下。
[解决办法]
#pragma warning( disable:4244)
----------------------
http://topic.csdn.net/u/20120507/12/5ac3a8af-5b2c-473d-9865-bbd5b48e6506.html?33091

热点排行