ogólną metodę zaokrąglić liczbę do wielokrotności inny numer, zaokrąglenia away from zero.
Dla całkowitej
int RoundNum(int num, int step)
{
if (num >= 0)
return ((num + (step/2))/step) * step;
else
return ((num - (step/2))/step) * step;
}
Dla pływaka
float RoundNum(float num, float step)
{
if (num >= 0)
return floor((num + step/2)/step) * step;
else
return ceil((num - step/2)/step) * step;
}
Znam niektóre części może się wydawać sprzeczne z intuicją, czy nie bardzo zoptymalizowany. Próbowałem rzutowania (liczba + krok/2) na int, ale dało to błędne wyniki dla ujemnych pływaków ((int) -12.0000 = -11
i takie). W każdym razie te kilka przypadków testowanego:
- dowolną liczbę w zaokrągleniu do 1 powinna być sama
- -3 zaokrąglone do kroku 2 = -4
- -2 zaokrąglone do kroku 2 = -2
- 3 zaokrąglone do kroku 2 = 4
- 2 zaokrąglone do kroku 2 = 2
- -2,3 zaokrąglone do stopnia 0,2 = -2.4
- -2,4 zaokrąglone do kroku 0,2 = -2,4
- 2,3 zaokrąglone do kroku 0,2 = 2,4
- 2,4 zaokrąglone do kroku 0,2 = 2,4
Próbowałem math.floor – dhardy
powierzchni jest podłoga dla podwójnych. – evanmcdonnal
podzielić przez 10, okrągłe, pomnożyć przez 10 –