2010-07-19 64 views
24

Làm thế nào tôi có thể khỏa lấp một số với giá trị X gần nhất (ví dụ: 50)Objective-C số vòng để gần 50

tức 47 sẽ là 50

24 sẽ là 0

74 sẽ là 50

99 sẽ là 100

vv ...

Tôi thực sự không biết bắt đầu từ đâu để tìm hiểu cách thực hiện điều này ...

P.S. Im sử dụng cacao cảm ứng cho iPhone

Thanks a lot Đánh dấu

Trả lời

50

Làm điều này:

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

Hoặc, "các giống như cách bạn có thể làm điều đó trong C "... –

+0

cảm ơn cả hai cách làm việc tốt chỉ cần – Mark

+1

50 * tầng ((Số/50) +0.5) có thể tốt hơn một chút. – djschwartz

13

Divide 50, tròn đến số nguyên gần nhất, và nhân với 50.

6

Nếu số dương là: 50 * tầng (số/50 + 0,5);

Nếu số âm: 50 * ceil (số/50 - 0,5);

1

Tôi muốn đề xuất giải pháp ít thanh lịch hơn, mặc dù chính xác hơn; nó chỉ hoạt động cho các số mục tiêu.

Ví dụ này làm tròn một số nhất định của giây tiếp theo đầy đủ 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

Vì vậy, kết hợp what've được nói ở đây, đây là chức năng chung:

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