मैं एक कम सुरुचिपूर्ण प्रस्ताव देना चाहता हूं, हालांकि अधिक सटीक समाधान; यह केवल लक्ष्य संख्याओं के लिए भी काम करता है।
यह उदाहरण अगले पूर्ण 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;
}
स्रोत
2011-02-21 22:13:08
या, " वैसे ही आप इसे सी में कर सकते हैं "... –
धन्यवाद दोनों तरीकों से ठीक काम किया – Mark
50 * मंजिल ((संख्या/50) +0.5) थोड़ा बेहतर हो सकता है। – djschwartz