当前位置:  开发笔记 > 编程语言 > 正文

内置.Net算法,将值舍入到最接近的10个区间

如何解决《内置.Net算法,将值舍入到最接近的10个区间》经验,为你挑选了3个好方法。

如何在C#中将任意值舍入到10个区间?例如,如果我有11,我希望它返回10,如果我有136,那么我希望它返回140.

我可以轻松地手工完成

return ((int)(number / 10)) * 10;

但我正在寻找一种内置算法来完成这项工作,比如Math.Round().我不想手工做的原因是我不想在我的项目中编写相同或类似的代码,即使是像上面那样简单的东西.



1> Chris Charab..:

类库中没有内置函数可以执行此操作.最接近的是System.Math.Round(),它仅用于将Decimal和Double类型的数字舍入到最接近的整数值.但是,如果使用的是.NET 3.5,则可以使用扩展方法将语句包装起来,这样可以更加干净地使用该函数.

public static class ExtensionMethods
{
    public static int RoundOff (this int i)
    {
        return ((int)Math.Round(i / 10.0)) * 10;
    }
}

int roundedNumber = 236.RoundOff(); // returns 240
int roundedNumber2 = 11.RoundOff(); // returns 10

如果你是针对旧版本的.NET框架进行编程,只需从RoundOff函数中删除"this",然后像这样调用函数:

int roundedNumber = ExtensionMethods.RoundOff(236); // returns 240
int roundedNumber2 = ExtensionMethods.RoundOff(11); // returns 10


我说我修好了,不是吗?
Dan Diplo:下一句话,OP解释他想要什么,描述四舍五入.阅读整个问题,而不仅仅是它的第一句话.
这个问题要求"四舍五入",但这个答案完成了.如果输入11,则应该返回20,而不是10.这就是你需要`Math.Ceiling()`的原因.

2> Armstrongest..:

使用Math.Ceiling始终向上舍入.

int number = 236;
number = (int)(Math.Ceiling(number / 10.0d) * 10);

模数(%)获得余数,因此得到:

// number = 236 + 10 - 6

把它放到扩展方法中

public static int roundupbyten(this int i){
    // return i + (10 - i % 10); <-- logic error. Oops!
    return (int)(Math.Ceiling(i / 10.0d)*10); // fixed
}

// call like so:
int number = 236.roundupbyten();

以上编辑:我应该用我的第一直觉去使用Math.Ceiling

我在计算UPC校验位时写了这篇博文.



3> Jronny..:

这可能有点太晚了,但我想有一天这可能会有很好的帮助......

我试过这个:

public int RoundOff(int number, int interval){
    int remainder = number % interval;
    number += (remainder < interval / 2) ? -remainder : (interval - remainder);
    return number;
}

使用:

int number = 11;
int roundednumber = RoundOff(number, 10);

这样,您可以选择是否将间隔的一半向上舍入或向下舍入.=)

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有