Подтвердить что ты не робот

Objective-c круглый номер до ближайшего 50

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

т.е. 47 будет 50

24 будет 0

74 будет 50

99 будет 100

и т.д...

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

P.S. Im с помощью cocoa -touch для iPhone

Большое спасибо Марк

4b9b3361

Ответ 1

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

50.0 * floor((Number/50.0)+0.5)

Ответ 2

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

Ответ 3

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

float RoundTo(float number, float to)
{
    if (number >= 0) {
        return to * floorf(number / to + 0.5f);
    }
    else {
        return to * ceilf(number / to - 0.5f);
    }
}

Ответ 4

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

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

Ответ 5

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

В этом примере округляется заданное количество секунд до следующего полного 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;
 }