2011-02-02 19 views
13

voglio per arrotondare un numero (decimale) in modo che sia divisibile per 5.arrotondamento un numero in modo che sia divisibile per 5

Per esempio, ho un paio di numeri ei numeri dopo arrotondamenti:

Number  Rounded 
0.4   5 
3.4   5 
7.3   10 

posso utilizzare ceil per convertire questo double per int e utilizzare un ciclo while per farli a multipli di 5, ma mi chiedevo se c'è un modo intelligente di realizzare questo.

Grazie.

+0

È il vostro ingresso un 'decimal' o un' double'? – AakashM

+0

http://stackoverflow.com/questions/752655/round-in-ms-sql-on-0-05-or-0-00 Ecco la soluzione per SQL – adopilot

risposta

6

ne dite:

5 * decimal.Ceiling(num/5) 
35

Potreste primo dividere per 5 e poi usare Math.Ceiling per arrotondare il valore. Successivamente, puoi moltiplicare per 5 di nuovo.

int rounded = (int) Math.Ceiling(Number/5) * 5 
+0

poiché 'rounded' è int, non digitare cast essere automatico ? – IrishBelly

+1

Non credo che un cast doppio possa essere automatico - deve essere sempre esplicito. –

9

Se volete

f[6] = 10 
f[-1] = 0 
f[-6] = -5 

Sören's answer è OK.

Se invece volete:

f[6] = 10 
f[-1] = -5 
f[-6] = -10 

si potrebbe fare qualcosa di simile:

f[x_] := Sign[x] Ceiling[Abs[x]/5] * 5 

C#:

var rounded = (int) Math.Sign(x) * Math.Ceiling(Math.Abs(x)/5) * 5; 
Problemi correlati