C#中的Math.Round可以用于整数值吗?

C#中的Math.Round可以用于整数值吗?,c#,asp.net,C#,Asp.net,例如,我有整数363 有没有办法让它变成360或365?这是一种黑客行为,但它可以: var rounded = Math.Round(363 / 5f) * 5; 没有内置的东西,你只需要自己编写逻辑代码。这里有一个这样的方法。(下跌更清晰,但上涨是可控的。) 编辑对于负数,逻辑几乎相反 static int RoundUpToFive(int number) { if (number >= 0) return number + (number % 5 >

例如,我有整数363


有没有办法让它变成360或365?

这是一种黑客行为,但它可以:

var rounded = Math.Round(363 / 5f) * 5;

没有内置的东西,你只需要自己编写逻辑代码。这里有一个这样的方法。(下跌更清晰,但上涨是可控的。)

编辑对于负数,逻辑几乎相反

static int RoundUpToFive(int number)
{
    if (number >= 0)
        return number + (number % 5 > 0 ? (5 - number % 5) : 0);
    else
        return number - (number % 5);
}

static int RoundDownToFive(int number)
{
    if (number >= 0)
        return number - number % 5;
    else
        return number + (number % 5 < 0 ? (-5 - number % 5) : 0);
}
静态整数舍入五(整数)
{
如果(数字>=0)
返回编号+(编号%5>0?(5-编号%5):0);
其他的
返回编号-(编号%5);
}
静态整数舍入向下五(整数)
{
如果(数字>=0)
返回编号-编号%5;
其他的
返回编号+(编号%5<0?(-5-编号%5):0);
}

以下是我通常做的事情,这是两种想法的结合:

static int RoundDown(int x, int n) {
    return x / n * n;
}

static int Round(int x, int n) {
    return (x + n / 2) / n * n;
}

static int RoundUp(int x, int n) {
    return (x + n - 1) / n * n;
}
(假设为正数;将其扩展为负数是很简单的。)

[编辑]

根据LLVM,Round函数也可以这样编写:

int Round(int x, int n) {
    int z = (x + n / 2);
    return z - (z % n);
}

您可能会发现它更优雅。

我是sry。但我只是不知道什么是5f?它指定5为浮点值。它的含义与
(float)5
相同。您必须使用浮点值进行除法,否则结果将被截断为整数,随后将始终向下舍入。请注意,当OP(可能)在查找
int
时,这将计算为
double
。将其放入扩展方法将非常糟糕。然后您只需舍入整数即可var i=363`然后`i.rounded()`得到你所需要的。@John:没有理由它不能被转换成
int
。你想要360还是365?(向上或向下舍入)您的_num%5==0?your_num:your_num+(your_num%5)@Ani,没有检查底片。会把水弄脏一点。
int Round(int x, int n) {
    int z = (x + n / 2);
    return z - (z % n);
}