2012-10-13 111 views

Respuesta

8

¿Desea redondear en múltiplo de 0.5? ¿Lo estoy entendiendo correctamente?

double RoundUpToPointFive(double d) 
{ 
    return Math.Ceiling(d * 2)/2; 
} 
+0

Creo que esto debería hacerlo. –

+0

Esto me intrigó, encontró que el 2 se encuentra haciendo 100/50, porque 50 es la mitad de 100, que es lo mismo que .5. Podría ser útil si quiere alterar el comportamiento del redondeo para decir 0.1 haciendo 100/10. – Rob

+0

ya ... está funcionando ... Gracias Yaar .. – Prasad

3

La forma más rápida y sucia:

Multiplicar por 2, techo, y se divide por 2. rápida y fácil de entender, pero esto va a fallar en casos extremos debido a la cantidad de desbordamiento.

Un método más robusto es cortar todo antes del decimal antes de evaluar la ronda con el método anterior, y sumar el resultado al número entero que cortó.

0

El método de David prácticamente lo sella, pero aquí hay otra forma más larga.

double dbNum = 3.44; 
double dbNumModified = 3.44 + 0.5; 
dbNumModified = Math.Floor(dbNum); 
if(dbNumModified < dbNum) 
{ 
    dbNumModified += 0.5; 
} 
return dbNumModified; 
+0

no funciona para 3.0 ... necesita '' <= – nbrooks

+0

mi suposición '3.0 -> 3.0, 3.1 -> 3.5, 3.6 -> 4.0' Si lo que dijo es lo el usuario quiere, entonces todo lo que tiene que hacer es reemplazar '<' con '<=' –

+0

Hmm buen punto ... – nbrooks

2

Por qué no tratan de éste, con un significado que quiere en la precisión:

public double Ceiling(double value, double significance) 
{ 
    if ((value % significance) != 0) 
    { 
     return ((int)(value/significance) * significance) + significance; 
    } 

    return Convert.ToDouble(value); 
} 

Uso:

var d1 = Ceiling(23.15, 0.5); // 23.5 
var d2 = Ceiling(23.56, 0.5); // 24.0 

Esta función de techo es utilizado por Microsoft Excel, y para hacer coincidir este cálculo ideé este algoritmo.

Referencia: Ceiling and Floor functions like Microsoft Excel in .NET

+0

Muy bonito. Al ver tu ejemplo, me di cuenta de que puedes redondearlo simplemente quitando la parte de + significación. – Rob

+0

Sí, eso ya está hecho en el enlace mencionado, para el cálculo de piso. :) –

Cuestiones relacionadas