的一般方法把一個數字到另一個數的倍數,舍入away from zero。
對於整數
int RoundNum(int num, int step)
{
if (num >= 0)
return ((num + (step/2))/step) * step;
else
return ((num - (step/2))/step) * step;
}
對於float
float RoundNum(float num, float step)
{
if (num >= 0)
return floor((num + step/2)/step) * step;
else
return ceil((num - step/2)/step) * step;
}
我知道有些部分可能似乎違反直覺的或者不是很優化。我試着將(num + step/2)投射到一個int,但是這給了負浮點數的錯誤結果((int) -12.0000 = -11
等)。反正這些是我測試少數情況下:
- 任何數量舍入到步驟1應該是本身
- -3四捨五入到步驟2 = -4
- -2四捨五入到步驟2 = -2
- 3四捨五入至步驟2 = 4
- 2四捨五入至步驟2 = 2
- -2.3四捨五入至步驟0.2 = -2。4
- -2.4四捨五入到步驟0.2 = -2.4
- 2.3四捨五入到步驟0.2 = 2.4
- 2.4四捨五入到步驟0.2 = 2.4
我試圖Math.Floor – dhardy 2013-03-01 09:32:09
地板是地板爲雙打。 – evanmcdonnal 2013-03-01 09:33:00
除以10,round,乘以10 – 2013-03-01 09:33:09