Potrzebuję zaokrąglić liczby całkowite, aby być najbliższą wielokrotnością innej liczby całkowitej. Przykłady wyników w przypadku wielokrotności 100:Zaokrąglanie liczby całkowitej do najbliższej wielokrotności innej liczby całkowitej
- 36-> 0
- 99-> 100
- 123-> 100
- 164-> 200
itd na.
wpadłem na następujący kod, który działa, ale czuje się „brudne”:
int RoundToMultiple(int toRound, int multiple)
{
return (toRound + (multiple/2))/multiple * multiple;
}
ten liczy na właściwości obcinania podziału całkowitej, aby to działało. Czy mogę liczyć na to, że ten kod będzie przenośny? Czy są jakieś konfiguracje kompilatora, w których to nie przyniesie pożądanego rezultatu? Jeśli tak, jak mogę osiągnąć te same wyniki w przenośny sposób?
W razie potrzeby, aby uzyskać lepszą odpowiedź, można założyć, że wielokrotności będą potęgami 10 (w tym wielokrotnościami 1). Można również założyć, że liczby są dodatnie.
Prawdopodobnie nie będzie działać dla liczb ujemnych. – Gerriet
@ Gerriet Dobry punkt, choć w moim przypadku liczby można również założyć jako pozytywne. Dodaję go do pytania: –
Jak zachowa się RoundToMultiple (150, 100)? Czy powinien powrócić 100 czy 200? Innymi słowy, zaokrąglić w górę, zaokrąglić w dół lub użyć reguł zaokrąglania bankiera? –