四舍五入到最接近的五

发布于 2024-08-07 04:10:19 字数 182 浏览 6 评论 0原文

我需要将双精度舍入到最接近的五。我找不到使用 Math.Round 函数来完成此操作的方法。我该怎么做?

我想要什么:

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

等等..

有没有简单的方法可以做到这一点?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

情话墙 2024-08-14 04:10:19

尝试:

Math.Round(value / 5.0) * 5;

Try:

Math.Round(value / 5.0) * 5;
撞了怀 2024-08-14 04:10:19

这有效并消除了对外部铸件的需要:

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

This works and removes the need for an outer cast:

5 * (int)Math.Round(n / 5.0)
卸妝后依然美 2024-08-14 04:10:19

这是一个简单的程序,可让您验证代码。
请注意 MidpointRounding 参数,如果没有它,您将四舍五入到最接近的偶数,在您的情况下意味着相差五(在 72.5 示例中)。

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

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();
        }
    }
酒浓于脸红 2024-08-14 04:10:19

您还可以编写一个通用函数:

选项 1 - 方法

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

并按如下方式使用:

var value = Round(72, 5);

选项 2 - 扩展方法

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

并按以下方式使用:

var price = 72.0;
var newPrice = price.Round(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);
|煩躁 2024-08-14 04:10:19

我是这样做的:

int test = 5 * (value / 5); 

对于上面的下一个值(步骤 5),只需添加 5。

I did this this way:

int test = 5 * (value / 5); 

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文