开发者

Round to nearest five

开发者 https://www.devze.com 2022-12-08 02:24 出处:网络
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?

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消