舍入正数或负数

时间:2015-07-01 13:36:57

标签: c++ floating-point integer rounding negative-number

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

有没有更好的方法来轮次foo来执行此操作:

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

基本上我想要这种行为:

  

3.4 =&gt; 3
  3.5 =&gt; 4
  -3.4 =&gt; -3
  -3.5 =&gt; -4

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

回到旧学校的C技巧,如果bool true转换为1,则false转为1:

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

您通常应该使用库函数,但如果它是关键部分,则可以针对此进行性能测试

答案 2 :(得分:1)

在C数学库中,有

double round  (double x);

或者有,

double nearbyint  (double x);