Round to nearest five

I need to round a double to nearest five. I can't find a way to do it with the Math.Round function. How can I do this?

What I want:

70 = 70
73.5 = 75
72 = 70
75.9 = 75
69 = 70

and so on..

Is there an easy way to do this?

60021 次浏览

Try:

Math.Round(value / 5.0) * 5;

This works and removes the need for an outer cast:

5 * (int)Math.Round(n / 5.0)

Here is a simple program that allows you to verify the code. Be aware of the MidpointRounding parameter, without it you will get rounding to the closest even number, which in your case means difference of five (in the 72.5 example).

    class Program
{
public static void RoundToFive()
{
Console.WriteLine(R(71));
Console.WriteLine(R(72.5));  //70 or 75?  depends on midpoint rounding
Console.WriteLine(R(73.5));
Console.WriteLine(R(75));
}


public static double R(double x)
{
return Math.Round(x/5, MidpointRounding.AwayFromZero)*5;
}


static void Main(string[] args)
{
RoundToFive();
}
}

I did this this way:

int test = 5 * (value / 5);

for the next value (step 5) above, just add 5.

You can also write a generic function:

Option 1 - Method

public int Round(double i, int v)
{
return (int)(Math.Round(i / v) * v);
}

And use it like:

var value = Round(72, 5);

Option 2 - Extension method

public static double Round(this double value, int roundTo)
{
return (int)(Math.Round(value / roundTo) * roundTo);
}

And use it like:

var price = 72.0;
var newPrice = price.Round(5);