我需要对一个数字进行四舍五入,但我不知道这个数字是正还是负。
有没有更好的方法来舍入 foo
,而不是这样做:
static_cast<int>(foo > 0 ? foo + 0.5 : foo - 0.5)
基本上我想要的行为是:
3.4 => 3 3.5 => 4 -3.4 => -3 -3.5 => -4
我需要对一个数字进行四舍五入,但我不知道这个数字是正还是负。
有没有更好的方法来舍入 foo
,而不是这样做:
static_cast<int>(foo > 0 ? foo + 0.5 : foo - 0.5)
回到老式的C技巧,这些技巧依赖于bool
将true
转换为1,将false
转换为0:
static_cast <int>(foo + 0.5 - (foo < 0.0))
通常情况下,您应该使用库函数,但如果这是关键部分,您可以对其进行性能测试。
。
double round (double x);
double nearbyint (double x);
static_cast
。lround
也会将值放在整数格式中。 - Jonathan Meeround
(double) 之外,还有 roundf
(float) 和 roundl
(long double)。 - leetNightshade
static_cast<int>(foo + 0.5 - (foo < 0.0))
,那么Glenn Teitebaum的回答也是一个很好的解决方案。 - Jonathan Mee