Ответ 1
Сделайте это:
50.0 * floor((Number/50.0)+0.5)
Как я могу округлить число до ближайшего значения X (например, 50)
т.е. 47 будет 50
24 будет 0
74 будет 50
99 будет 100
и т.д...
Я действительно не знаю, с чего начать, как это сделать...
P.S. Im с помощью cocoa -touch для iPhone
Большое спасибо Марк
Сделайте это:
50.0 * floor((Number/50.0)+0.5)
Разделите на 50, округлите до ближайшего целого числа и умножьте на 50.
Итак, объединение того, что было сказано здесь, здесь является общей функцией:
float RoundTo(float number, float to)
{
if (number >= 0) {
return to * floorf(number / to + 0.5f);
}
else {
return to * ceilf(number / to - 0.5f);
}
}
Если число положительное: 50 * этаж (число/50 + 0,5);
Если число отрицательное: 50 * ceil (число/50 - 0,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;
}