C中的下一个.05

时间:2010-02-20 17:04:18

标签: c

考虑用户设置的浮动值,例如 1.82 。如何找到下一个最高的.05值?对于给定的示例,下一个最高值是1.85。

有一种简单的方法还是采用复杂的算法?我尝试使用floorceiling函数来计算从浮点到下一个最高和最低整数的距离。但是,一旦掌握了这些信息,我不确定该怎么办。

感谢。

5 个答案:

答案 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;
    }