objective-c舍入数到最近的50

时间:2010-07-19 23:29:31

标签: iphone objective-c math

如何将数字舍入到最接近的X值(例如50)

即 47将是50

24将是0

74将是50

99将是100

等...

我真的不知道从哪里开始研究如何做到这一点......

P.S。我在iPhone上使用cocoa-touch

非常感谢 标记

5 个答案:

答案 0 :(得分:52)

这样做:

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

答案 1 :(得分:13)

除以50,舍入到最接近的整数,然后乘以50。

答案 2 :(得分: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);
    }
}

答案 3 :(得分:6)

如果数字为正数: 50 *楼(数量/ 50 + 0.5);

如果数字为负数: 50 * ceil(数字/ 50 - 0.5);

答案 4 :(得分: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;
 }