¿Cómo redondear un decimal hacia arriba?

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)?

Tipo de hacky pero una forma muy intuitiva de hacerlo:

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

Puede agregar 0.005 al valor y luego redondear el resultado.

Creo que estás buscando el método Math.Ceiling .

Podría combinar esto con un multiplicador para especificar cuántos decimales se redondearán. Me gusta esto,

 public float roundUp(float number, int numDecimalPlaces) { double multiplier = Math.Pow(10, numDecimalPlaces)) return Math.ceiling(number*multiplier) / multiplier; } 

Aquí está el código de un método de redondeo para un valor y una fracción base. La fracción base que debe usar para su 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 formas interesantes como, por ejemplo, utilizando una fracción base de 0.3M. Bueno espero que responda a tus preguntas, diviértete:

 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; } 

Aquí está mi versión de un método RoundUp, en este decimal específico puede

 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); } }