Tuesday, January 23, 2007

浮点数转整型数

C/C++ 里如用强制类型转换把浮点数转成整型数, 像这样 int a=(int)b, 只是简单地丢弃 b 的小数部分。实际中经常希望是四舍五入地转换,这可以这么做:
#define ROUND(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
如果只用于正数,可以简单地用(int)(x + 0.5).
实际上因为位数不同,float 型转成 int 型可能溢出,即使 long 也是。要代码可靠的话还需作越界检查。

参考:
http://c-faq.com/fp/round.html
http://www.cs.tut.fi/~jkorpela/round.html
http://www.gamedev.net/community/forums/topic.asp?topic_id=280883

No comments:

Post a Comment

Please let me know who you are.