1. 程式人生 > >四捨六入五成雙的浮點轉整型的巨集定義

四捨六入五成雙的浮點轉整型的巨集定義

原來浮點轉整型,如果用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上測試。