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 开发者_StackOverflow中文版easy way to do this?
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();
}
}
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);
I did this this way:
int test = 5 * (value / 5);
for the next value (step 5) above, just add 5.
精彩评论