Consider a float value like 1.82 set by the user. How do I find the next highest .05 value? For the given example the next highest value is 1.85.
Is the
Multiply by 20, use ceiling, divide by 20.
float fixedCeil(float num, float factor)
{
float steps = 1.0f / factor;
return ceil(steps*num)/steps;
}
assert(fixedCeil(2.43f, 0.05f) == 2.45f);
(assert is just fictional)
Code for @Justin's answer. Note that this is very easy to generalize.
#include <math.h>
#include <stdio.h>
int main(void) {
int i;
double numbers[] = {
1.82, 0.3, 0.2, 0.5, 10000000000.849,
};
for (i = 0; i < sizeof(numbers)/sizeof(numbers[0]); ++i) {
double scaled = ceil(20 * numbers[i]);
printf("%.2f\n", scaled/20.0);
}
return 0;
}
You can use something like
// Rounds X to the nearest Y
double round(double x, double y)
{
return floor(x / y + 0.5) * y;
}
A great useful and informative resource for Rounding methods.