您的位置:首页 > 编程语言 > C语言/C++

c语言:四舍五入

2016-03-28 01:31 399 查看
对于正的浮点数,最简单的四舍五入方法就是用这样的一个表达式

(long) (x+0.5)


但是如果表达式对负数有效的话会更好,即使在你看来负数的情况不会发生。这意味着你可以用一个条件表达式:

x >= 0 ? (long)(x+0.5) : (long)(x-0.5)


这个表达式的返回值就是与浮点变量 x 的值最接近的整数值。

如果需要大量地使用舍入转换,则可以写这样的一个宏:

#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))


这可以在某种程度上使代码更具可读性。

注意到这样的转换会将 1.5 变为 2 但却将 -1.5 变为 -2,那么对于这样正好处于两个整数之间的浮点数,你可能需要做一些其它的处理,但这在实际当中并不十分重要。

需要小心的是,将一个浮点数转换为一个整型数可能导致上溢,但大多数的实现都没有进行相关的判断。用 long 替代 int 会给出一个更宽的范围(建议使用 long),但仍然比浮点数的范围要小得多。

如果效率不是至关重要的话,则可以定义这样的一个函数(而不是简单地写一个 #define),使你的程序更具鲁棒性:

long round(double x) {

assert(x >= LONG_MIN-0.5);

assert(x <= LONG_MAX+0.5);

if (x >= 0)

return (long) (x+0.5);

return (long) (x-0.5);

}


如果在意效率的话,可以写这样一个宏

#define round(x) ((x) < LONG_MIN-0.5 || (x) > LONG_MAX+0.5 ?\

error() : ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))


这要求在程序中有
#include <limits.h>
,并且有一个处理错误的函数 error,其返回值为 long 类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: