2010-07-19 2 views
24

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

т.е. 47 будет 50

24 будет 0

74 будет 50

99 будет 100

и т.д ...

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

P.S. Им с помощью какао-тач для iPhone

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

ответ

50

ли это:

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

Или « так же, как вы могли бы сделать это в C "... –

+0

спасибо, что оба пути работали просто отлично – Mark

+1

50 * floor ((Number/50) +0.5) может быть немного лучше. – djschwartz

13

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

6

Если номер положительный: 50 * пол (номер/50 + 0,5);

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

1

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

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

Таким образом, объединение здесь было Что у сказал, здесь общая функция:

float RoundTo(float number, float to) 
{ 
    if (number >= 0) { 
     return to * floorf(number/to + 0.5f); 
    } 
    else { 
     return to * ceilf(number/to - 0.5f); 
    } 
} 
Смежные вопросы