I'm using VS2008 and I've included math.h but I still can't find a round function. Does it exist?

I'm seeing a bunch of "add 0.5 and cast to int" solutions on google. Is that the best practice?

You may use C++11's `std::round()`

.

If you are still stuck with older standards, you may use `std::floor()`

, which always rounds to the lower number, and `std::ceil()`

, which always rounds to the higher number.

To get the normal rounding behaviour, you would indeed use `floor(i + 0.5)`

.

This way will give you problems with negative numbers, a workaround for that problem is by using ceil() for negative numbers:

```
double round(double number)
{
return number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5);
}
```

Another, cleaner, but more resource-intensive, way is to make use of a stringstream and the input-/output-manipulators:

```
#include <iostream>
#include <sstream>
double round(double val, int precision)
{
std::stringstream s;
s << std::setprecision(precision) << std::setiosflags(std::ios_base::fixed) << val;
s >> val;
return val;
}
```

Only use the second approach if you are not low on resources and/or need to have control over the precision.

Using `floor(num + 0.5)`

won't work for negative numbers. In that case you need to use `ceil(num - 0.5)`

.

```
double roundToNearest(double num) {
return (num > 0.0) ? floor(num + 0.5) : ceil(num - 0.5);
}
```

Licensed under: CC-BY-SA with attribution

Not affiliated with: Stack Overflow