2010-07-19 19 views
24

मैं कैसे निकटतम एक्स मूल्य के लिए एक नंबर दौर सकते हैं (उदाहरण के लिए 50)उद्देश्य-सी दौर संख्या निकटतम 50

यानी 47 होगा 50

24 होगा 0

74 होगा 50

आदि होगा ...

मुझे वास्तव में यह नहीं पता कि यह कैसे करना है इसे देखना शुरू करें ...

पीएस इम iPhone के लिए कोको स्पर्श का उपयोग कर

धन्यवाद एक बहुत मार्क

उत्तर

50

से गुणा यह करें:

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

या, " वैसे ही आप इसे सी में कर सकते हैं "... –

+0

धन्यवाद दोनों तरीकों से ठीक काम किया – Mark

+1

50 * मंजिल ((संख्या/50) +0.5) थोड़ा बेहतर हो सकता है। – djschwartz

13

50 से विभाजित, निकटतम पूर्णांक तक गोल, और 50.

6

यदि संख्या सकारात्मक है: 50 * मंजिल (संख्या/50 + 0.5);

यदि संख्या ऋणात्मक है: 50 * छत (संख्या/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

तो, संयोजन what've यहाँ कहा गया है, यहाँ सामान्य कार्य है:

float RoundTo(float number, float to) 
{ 
    if (number >= 0) { 
     return to * floorf(number/to + 0.5f); 
    } 
    else { 
     return to * ceilf(number/to - 0.5f); 
    } 
} 
संबंधित मुद्दे