Округление до следующего .05 в C - PullRequest
0 голосов
/ 20 февраля 2010

Рассмотрим значение с плавающей запятой, например 1,82 , установленное пользователем.Как мне найти следующее наивысшее значение .05?Для данного примера следующее наивысшее значение равно 1,85.

Есть ли простой способ или он требует сложного алгоритма?Я пытался использовать функции floor и ceiling, чтобы определить расстояние от числа с плавающей точкой до следующего наибольшего и минимального целых чисел.Но я не знаю, как поступить, когда получу эту информацию.

Спасибо.

Ответы [ 5 ]

9 голосов
/ 20 февраля 2010

Умножьте на 20, используйте потолок, разделите на 20.

0 голосов
/ 20 февраля 2010

Вы можете использовать что-то вроде

    // Rounds X to the nearest Y
    double round(double x, double y)
    {
        return floor(x / y + 0.5) * y;
    }
0 голосов
/ 20 февраля 2010
float fixedCeil(float num, float factor)
{
  float steps = 1.0f / factor;
  return ceil(steps*num)/steps;
}

assert(fixedCeil(2.43f, 0.05f) == 2.45f);

(утверждать просто вымышленный)

0 голосов
/ 20 февраля 2010

Код для ответа @ Джастина.Обратите внимание, что это очень легко обобщить.

#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;
}
0 голосов
/ 20 февраля 2010

Отличный полезный и информативный ресурс для Методы округления .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...