2011-02-02 45 views
13

Quiero reunir a un número (decimal) para que sea divisible por 5.redondeando un número para que sea divisible por 5

Por ejemplo, tengo un par de números y los números después de redondeo:

Number  Rounded 
0.4   5 
3.4   5 
7.3   10 

puedo usar ceil convertir este double a int y utilizar un bucle while para llegar a la siguiente múltiplo de 5, pero me preguntaba si hay alguna forma inteligente de llevar a cabo esto.

Gracias.

+0

Está su entrada un '' decimal' o una double'? – AakashM

+0

http://stackoverflow.com/questions/752655/round-in-ms-sql-on-0-05-or-0-00 Aquí está la solución para SQL – adopilot

Respuesta

6

¿Qué tal:

5 * decimal.Ceiling(num/5) 
35

Primero, podría dividir entre 5 y luego usar Math.Ceiling para redondear el valor. Luego, puedes multiplicar por 5 nuevamente.

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

ya que 'redondeado' es int, no será de tipo automático. ? – IrishBelly

+1

No creo que un doble a int puede ser automático, siempre tiene que ser explícito. –

9

Si desea

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

Sören's answer está bien.

Si por el contrario desea:

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

que podría hacer algo como:

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

C#:

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