Search code examples
c#decimalrounding

Rounding down to 2 decimal places in c#


How can I multiply two decimals and round the result down to 2 decimal places?

For example if the equation is 41.75 x 0.1 the result will be 4.175. If I do this in c# with decimals it will automatically round up to 4.18. I would like to round down to 4.17.

I tried using Math.Floor but it just rounds down to 4.00. Here is an example:

Math.Floor (41.75 * 0.1);

Solution

  • The Math.Round(...) function has an Enum to tell it what rounding strategy to use. Unfortunately the two defined won't exactly fit your situation.

    The two Midpoint Rounding modes are:

    1. AwayFromZero - When a number is halfway between two others, it is rounded toward the nearest number that is away from zero. (Aka, round up)
    2. ToEven - When a number is halfway between two others, it is rounded toward the nearest even number. (Will Favor .16 over .17, and .18 over .17)

    What you want to use is Floor with some multiplication.

    var output = Math.Floor((41.75 * 0.1) * 100) / 100;
    

    The output variable should have 4.17 in it now.

    In fact you can also write a function to take a variable length as well:

    public decimal RoundDown(decimal i, double decimalPlaces)
    {
       var power = Convert.ToDecimal(Math.Pow(10, decimalPlaces));
       return Math.Floor(i * power) / power;
    }