2015-04-10 4 views
11

Esiste un modo idiomatico per arrotondare allo più vicino allo più di un numero, a meno dell'arrotondamento sia verso l'alto che verso il basso e vedere quale è il più vicino?Arrotondare al multiplo più vicino di un numero

solo supporre interi:

number multiple result 
12  5   10 
13  5   15 
149  10   150 
+1

Se riesci a arrotondare (il pavimento) al multiplo più vicino, aggiungi "multiplo/2" all'ingresso e ora disponi di una funzione rotonda. Se vuoi che ritorni nei casi dispari, aggiungi invece 'ceil (multiple/2)'. – VoidStar

+0

@VoidStar Non voglio arrotondare in su o in giù. –

+0

Devi comunque scegliere un criterio di spareggio. Come arrotondi il 15 con 6 come multiplo? O vai giù o su. Ti ho dato un modo per fare entrambe le cose. Le risposte qui sotto mostrano solo arrotondamenti in questo caso poiché scelgono l'opzione 'multiple/2'. Anche se alcuni addirittura preferiscono arrotondare i banchieri. – VoidStar

risposta

16

aggiungere la metà del multiplo, poi arrotondare.

result = ((number + multiple/2)/multiple) * multiple; 

o

result = number + multiple/2; 
result -= result % multiple; 

Questo arrotonda se il numero è esattamente nel mezzo. Potrebbe essere necessario modificare il calcolo se si desidera un comportamento diverso in quel caso. Inoltre, fai attenzione all'overflow se number potrebbe essere vicino alla parte superiore dell'intervallo del tipo.

+0

Questo è esattamente quello che avevo fatto. Grazie per la conferma, penso anche che sia bello e fa il lavoro. –