考虑用户设置的浮动值,例如 1.82 。如何找到下一个最高的.05值?对于给定的示例,下一个最高值是1.85。
有一种简单的方法还是采用复杂的算法?我尝试使用floor
和ceiling
函数来计算从浮点到下一个最高和最低整数的距离。但是,一旦掌握了这些信息,我不确定该怎么办。
感谢。
答案 0 :(得分:9)
乘以20,使用上限,除以20。
答案 1 :(得分:0)
Rounding methods的一个非常有用且信息丰富的资源。
答案 2 :(得分:0)
@ Justin答案的代码。请注意,这很容易概括。
#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;
}
答案 3 :(得分:0)
float fixedCeil(float num, float factor)
{
float steps = 1.0f / factor;
return ceil(steps*num)/steps;
}
assert(fixedCeil(2.43f, 0.05f) == 2.45f);
(断言只是虚构的)
答案 4 :(得分:0)
您可以使用类似
的内容 // Rounds X to the nearest Y
double round(double x, double y)
{
return floor(x / y + 0.5) * y;
}