Adam Goss
Adam Goss

Reputation: 1027

How to round a decimal up?

Given a decimal '96.154', how can I ensure that it is always rounded up to 96.16 (as opposed to normal rounding to 2 decimals which would give 96.15).

Upvotes: 17

Views: 15565

Answers (6)

payetools-steve
payetools-steve

Reputation: 4010

In case anyone is looking at this somewhat old question in 2022, the easiest way to do this with more recent versions of the framework/.NET core is this:

decimal.Round(96.154M, 2, MidpointRounding.ToPositiveInfinity)

This gives the result 96.16. The second parameter is the number of digits.

Note that if the input is negative and you want to round up to the nearest whole negative number, then you need to specify MidpointRounding.ToNegativeInfinity. Obviously you can test the input value's sign and use the appropriate MidpointRounding value if you want to support both scenarios.

Upvotes: 1

Jorge Delgado
Jorge Delgado

Reputation: 1

Here is my version of a RoundUp method, In this can specific 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);
    }
}

Upvotes: 0

Ben Ripley
Ben Ripley

Reputation: 2145

I think your looking for the Math.Ceiling method.

You could combine this with a multiplier to specify how many decimal places to round. Like this,

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

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

Upvotes: 6

Jorge Gonzalez
Jorge Gonzalez

Reputation: 1

Here is the code of a roundUp method for a value and base fraction. The base fraction you should use for your question is 0.05M. However the method can be used for other common scenario which is base fraction 0.5M; And you can apply it in interesting ways like for example using a base fraction of 0.3M. Well I hope it should answer your questions, have fun :

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

Upvotes: 0

Yuck
Yuck

Reputation: 50825

Kind of hacky but a very intuitive way to do so:

var val = 96.154M;

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

Upvotes: 19

Bruno Ferreira
Bruno Ferreira

Reputation: 952

You can add 0.005 to the value and then round the result.

Upvotes: 7

Related Questions