四舍五入正数或负数

Rounding a Positive or Negative Number

我需要对一个数字进行四舍五入,但我不知道该数字是正数还是负数。

有没有更好的方法来舍入 foo 来做到这一点:

static_cast<int>(foo > 0 ? foo + 0.5 : foo - 0.5)

基本上我想要这种行为:

3.4 => 3
3.5 => 4
-3.4 => -3
-3.5 => -4

对于 C++,有一个:std::lround

在 C 数学库中,

double round  (double x);

或者有,

double nearbyint  (double x);

回到老派的 C 技巧,依靠 bool 转换为 1 if true 和 0 if false:

 static_cast <int>(foo + 0.5 - (foo < 0.0))

你一般应该使用库函数,但是如果是临界区你可以针对它进行性能测试