2012-08-03 36 views
14

Dado un decimal '96 .154 ', ¿cómo puedo asegurarme de que siempre se redondea a 96.16 (en oposición al redondeo normal a 2 decimales que daría 96.15)?¿Cómo redondear un decimal hacia arriba?

+0

¿Cómo funciona 96,154 ronda hasta 96.16 y no redondear a la baja a 96.15? Sería bueno detallar la especificación de cómo debería funcionar el redondeo –

+0

Consulte este enlace http://stackoverflow.com/questions/11740989/rounding-decimal-value/11741129#11741129 – sabz23

+0

¿Es este el tipo decimal real o el doble? – ken2k

Respuesta

16

tipo de hacky, pero de una manera muy intuitiva para hacerlo:

var val = 96.154M; 

var result = Math.Ceiling(val * 100)/100.0M; 
+0

No es el más ideal como dices, pero parece ser la mejor solución –

5

creo que lo que buscas es el método Math.Ceiling.

Puede combinar esto con un multiplicador para especificar la cantidad de lugares decimales a redondear. De esta manera,

public float roundUp(float number, int numDecimalPlaces) 
{ 
    double multiplier = Math.Pow(10, numDecimalPlaces)) 

    return Math.ceiling(number*multiplier)/multiplier; 
} 
6

Puede agregar 0.005 al valor y luego redondear el resultado.

+1

genio pero, depende si siempre quieres redondear desde cero, ¿qué hay de los negativos? – Jodrell

+0

@Jodrell El título de la pregunta lo dice todo "siempre arriba". Por cierto, elevé el comentario sobre números negativos. –

+3

Esto no funcionará cuando el valor sea '96.150', ya que eso lo redondearía a' 96.16', lo cual es incorrecto, ya que debería indicar '96.15'. – Steven

0

Aquí está el código de un método RoundUp para un valor y una fracción base. La fracción base que deberías usar para tu pregunta es 0.05M. Sin embargo, el método puede usarse para otro escenario común, que es la fracción base 0.5M; Y puede aplicarlo de maneras interesantes, como por ejemplo, usando una fracción base de 0.3M. Bueno espero que debe responder a sus preguntas, divertirse:

static decimal roundUp(decimal aValue, decimal aBaseFraction) 
{ 
    decimal quotient = aValue/aBaseFraction; 
    decimal roundedQuotient = Math.Round(quotient, 0); 
    decimal roundAdjust = 0.0M; 
    if (quotient > roundedQuotient) 
    { 
     roundAdjust = aBaseFraction; 
    } 
    return roundAdjust + roundedQuotient * aBaseFraction; 
} 
0

aquí está mi versión de un método de Roundup, En este pueda específica decimal

void Main() 
{ 
    Console.WriteLine(RoundUp(2.8448M, 2)); 
    //RoundUp(2.8448M, 2).Dump(); 
} 

public static decimal RoundUp(decimal numero, int numDecimales) 
{ 
    decimal valorbase = Convert.ToDecimal(Math.Pow(10, numDecimales)); 
    decimal resultado = Decimal.Round(numero * 1.00000000M, numDecimales + 1, MidpointRounding.AwayFromZero) * valorbase; 
    decimal valorResiduo = 10M * (resultado - Decimal.Truncate(resultado)); 

    if (valorResiduo < 5) 
    { 
     return Decimal.Round(numero * 1.00M, numDecimales, MidpointRounding.AwayFromZero); 
    } 
    else 
    { 
     var ajuste = Convert.ToDecimal(Math.Pow(10, -(numDecimales + 1))); 
     numero += ajuste; 
     return Decimal.Round(numero * 1.00000000M, numDecimales, MidpointRounding.AwayFromZero); 
    } 
} 
Cuestiones relacionadas