我需要对一个数字进行四舍五入,但我不知道这个数字是负数还是正数。
有没有更好的方法来轮次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
答案 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);