круглый номер объектива с до 50 - PullRequest
25 голосов
/ 20 июля 2010

Как округлить число до ближайшего значения X (например, 50)

т.е. 47 будет 50

24 будет 0

74 будет 50

99 будет 100

и т.д ...

Я действительно понятия не имею, с чего начать, как это сделать ...

P.S. Я использую Cocoa-Touch для iPhone

Большое спасибо Mark

Ответы [ 5 ]

52 голосов
/ 20 июля 2010

Сделайте это:

50.0 * floor((Number/50.0)+0.5)
13 голосов
/ 20 июля 2010

Разделите на 50, округлите до ближайшего целого числа и умножьте на 50.

7 голосов
/ 26 сентября 2012

Итак, объединяя сказанное здесь, мы получаем общую функцию:

float RoundTo(float number, float to)
{
    if (number >= 0) {
        return to * floorf(number / to + 0.5f);
    }
    else {
        return to * ceilf(number / to - 0.5f);
    }
}
6 голосов
/ 02 января 2011

Если число положительное: 50 * этаж (число / 50 + 0,5);

Если число отрицательное: 50 * ceil (число / 50 - 0,5);

1 голос
/ 22 февраля 2011

Я хотел бы предложить менее элегантное, но более точное решение; это работает только для целевых чисел.

Этот пример округляет указанное количество секунд до следующего полного 60:

int roundSeconds(int inDuration) {

    const int k_TargetValue = 60;
    const int k_HalfTargetValue = k_TargetValue / 2;

    int l_Seconds = round(inDuration);                           // [MININT .. MAXINT]
    int l_RemainingSeconds = l_Seconds % k_TargetValue;          // [-0:59 .. +0:59]
    if (ABS(l_RemainingSeconds) < k_HalfTargetValue) {           // [-0:29 .. +0:29]
        l_Seconds -= l_RemainingSeconds;                         // --> round down
    } else if (l_RemainingSeconds < 0) {                         // [-0:59 .. -0:30]
        l_Seconds -= (k_TargetValue - ABS(l_RemainingSeconds));  // --> round down
    } else {                                                     // [+0:30 .. +0:59]
        l_Seconds += (k_TargetValue - l_RemainingSeconds);       // --> round up
    }

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