首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >内置.Net算法,可将数值舍入到最接近的10个区间

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

Stack Overflow用户
提问于 2008-11-08 06:05:52
回答 5查看 80.8K关注 0票数 71

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

我可以很容易地手工做这件事

代码语言:javascript
复制
return ((int)(number / 10)) * 10;

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-08 07:13:29

在类库中没有内置的函数可以做到这一点。最接近的是System.Math.Round(),它只用于将Decimal和Double类型的数字舍入到最接近的整数值。但是,如果您使用的是.NET 3.5,则可以将语句包装在扩展方法中,这将允许您更干净地使用该函数。

代码语言:javascript
复制
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“,并像这样调用该函数:

代码语言:javascript
复制
int roundedNumber = ExtensionMethods.RoundOff(236); // returns 240
int roundedNumber2 = ExtensionMethods.RoundOff(11); // returns 10
票数 110
EN

Stack Overflow用户

发布于 2008-11-08 06:22:18

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

代码语言:javascript
复制
int number = 236;
number = (int)(Math.Ceiling(number / 10.0d) * 10);

模数(%)得到余数,所以你得到:

代码语言:javascript
复制
// number = 236 + 10 - 6

将其放入一个扩展方法中

代码语言:javascript
复制
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

I blogged about this when calculating UPC check digits

票数 25
EN

Stack Overflow用户

发布于 2009-11-24 15:16:19

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

我已经尝试过了:

代码语言:javascript
复制
public int RoundOff(int number, int interval){
    int remainder = number % interval;
    number += (remainder < interval / 2) ? -remainder : (interval - remainder);
    return number;
}

要使用以下命令:

代码语言:javascript
复制
int number = 11;
int roundednumber = RoundOff(number, 10);

这样,您可以选择是向上舍入还是向下舍入间隔的一半。=)

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/274439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档