原来浮点转整型,如果用C或是C++强制转换的话,小数部分就全部都舍去了。
如:float temp=2.55;
(int)temp=2
如果想四舍五入呢?注意,这里的四舍五入不是传统的四舍五入,因为四舍五入的误差很大,正确的方法为:四舍六入五成双,如果小数为:5,则根据前面一位整数位是奇(+1)或是偶(不进位)来操作。
下面为我用到的浮点转整型的宏定义。
inum为转换后的整型。
fnum为转换前的浮点数。
#define FTOUINT16(inum,fnum) (inum=(((WORD)fnum)%2!=0)?((WORD)(fnum+0.5)):((WORD)fnum))
#define FTOUINT32(inum,fnum) (inum=(((UINT)fnum)%2!=0)?((UINT)(fnum+0.5)):((UINT)fnum))
如temp=33.5;
DWORD inum;
FTOUINT16(inum,temp); //执行完后:inum=34,奇进位。
如temp=32.5;
DWORD inum;
FTOUINT16(inum,temp); //执行完后:inum=32,偶不进位。
以上可以在VC上测试。