如何可以數字舍入到最接近的X的值(例如50)目標c輪數到最接近的50
即 47將爲50
24將0
74將50
99將100
等等
我真的不知道從哪裏開始尋找如何做到這一點...
P.S.即時通訊使用可可觸摸的iPhone
非常感謝 馬克
如何可以數字舍入到最接近的X的值(例如50)目標c輪數到最接近的50
即 47將爲50
24將0
74將50
99將100
等等
我真的不知道從哪裏開始尋找如何做到這一點...
P.S.即時通訊使用可可觸摸的iPhone
非常感謝 馬克
乘這樣做:
50.0 * floor((Number/50.0)+0.5)
除以50,四捨五入到最接近的整數,並通過50
如果數字是正數: 50 * floor(數字/ 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;
}
因此,結合搞什麼名堂在這裏說,這裏是一般功能:
float RoundTo(float number, float to)
{
if (number >= 0) {
return to * floorf(number/to + 0.5f);
}
else {
return to * ceilf(number/to - 0.5f);
}
}
或者「的同樣的方式,你可能會在C「... – 2010-07-19 23:38:35
感謝雙方工作得很好 – Mark 2010-07-20 01:04:15
50 * floor((Number/50)+0.5)可能會好一點。 – djschwartz 2011-04-29 16:16:30