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

时间:2010-12-21 03:28:37

标签: c# asp.net

例如我有整数363。

任何使其成为360或365的方法?

3 个答案:

答案 0 :(得分:8)

这是一个黑客攻击,但它有效:

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

答案 1 :(得分:5)

没有任何内置功能,您只需要自己编写逻辑代码。这是一种这样的方法。 (下去更清楚,但上升是可以控制的。)

int number = 363;
int roundedDown = number - number % 5;
int roundedUp = number + (number % 5 > 0 ? (5 - number % 5) : 0);
对于负数,

编辑,逻辑几乎被颠倒了。

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

答案 2 :(得分: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);
}

你可能会发现更优雅。