C Round Function






4.62/5 (8 votes)
It's really weird that the C math library (math.h) doesn't support the round function. This post shows how to create one in C. Pretty simple, but can save you little thinking :)
It’s really weird that the C math library (math.h) doesn’t support the round function. It only includes the floor function which rounds down a float to an integer (can also be done by implicit or explicit casting) and the ceil function which rounds the value up.
For example:
int x;
x = floor(1.2); // x is set to 1
x = floor(1.8); // x is set to 1
x = (int)1.8; // x is set to 1 (Explicit Narrowing Conversion)
x = 1.8; // x is set to 1 (Implicit Narrowing Conversion)
x = ceil(1.2); // x is set to 2
x = ceil(1.8); // x is set to 2
The round function is supposed to round the float value to the nearest integer.
x = round(1.2); // x is set to 1
x = round(1.8); // x is set to 2
This can be done adding a 0.5
to the value and then truncating it.
x = (int)(1.2 + 0.5); // x is set to 1
x = (int)(1.8 + 0.5); // x is set to 2
We also have to take negative values into consideration by adding -0.5
and then truncating.
x = (int)(-1.2 - 0.5); // x is set to -1
x = (int)(-1.8 - 0.5); // x is set to -2
Thus, here is the resulting C function:
int round(double number)
{
return (number >= 0) ? (int)(number + 0.5) : (int)(number - 0.5);
}
Note that you might want to use long rather than int to include support for larger numbers and avoid integer overflow.
That’s it, pretty much primitive, but fun!
Enjoy!
Ali B
