将整数舍入到最接近的10的倍数

dha*_*rdy 27 c# currency rounding

我想弄清楚如何围绕价格 - 两种方式.例如:

Round down
43 becomes 40
143 becomes 140
1433 becomes 1430

Round up
43 becomes 50
143 becomes 150
1433 becomes 1440
Run Code Online (Sandbox Code Playgroud)

我有这样的情况,我有一个价格范围说:

£143 - £193
Run Code Online (Sandbox Code Playgroud)

其中我想表现为:

£140 - £200
Run Code Online (Sandbox Code Playgroud)

因为它看起来更干净

有关如何实现这一目标的任何想法?

eva*_*nal 59

我只想创建一些方法;

int RoundUp(int toRound)
{
     if (toRound % 10 == 0) return toRound;
     return (10 - toRound % 10) + toRound;
}

int RoundDown(int toRound)
{
    return toRound - toRound % 10;
}
Run Code Online (Sandbox Code Playgroud)

模数给出了余数,在四舍五入的情况下10 - r将你带到最接近的十分之一,向下舍入你只需减去r.挺直的.

  • 'RoundUp`被打破了.如果你传递'20`,它会被舍入到'30',这很可能不是你想要的.你可以做一个条件测试(`if((toRound%10)== 0)return toRound;`)或者使用无条件舍入,例如`return((toRound + 9)/ 10)*10;` (10认同)
  • 请注意,上面的逻辑仅适用于正数(正如我刚刚发现的那样). (3认同)
  • 如果您在价格计算中有任何负数,则更改为"Math.Abs​​(toRound)%10". (2认同)

Mat*_*son 15

您不需要使用模数(%)或浮点数...

这有效:

public static int RoundUp(int value)
{
    return 10*((value + 9)/10);
}

public static int RoundDown(int value)
{
    return 10*(value/10);
}
Run Code Online (Sandbox Code Playgroud)


PaR*_*RaJ 10

此代码舍入到最接近的10的倍数:

int RoundNum(int num)
{
     int rem = num % 10;
     return rem >= 5 ? (num - rem + 10) : (num - rem);
}
Run Code Online (Sandbox Code Playgroud)

使用非常简单:

Console.WriteLine(RoundNum(143)); // prints 140
Console.WriteLine(RoundNum(193)); // prints 190
Run Code Online (Sandbox Code Playgroud)


Chr*_*aes 5

将一个数字舍入为另一个数字的倍数(从零开始舍入)的通用方法。

对于整数

int RoundNum(int num, int step)
{
    if (num >= 0)
        return ((num + (step / 2)) / step) * step;
    else
        return ((num - (step / 2)) / step) * step;
}
Run Code Online (Sandbox Code Playgroud)

对于浮动

float RoundNum(float num, float step)
{
    if (num >= 0)
        return floor((num + step / 2) / step) * step;
    else
        return ceil((num - step / 2) / step) * step;
}
Run Code Online (Sandbox Code Playgroud)

我知道有些部分可能看起来违反直觉或不是很优化。我尝试将 (num + step / 2) 转换为 int,但这给出了负浮点数的错误结果((int) -12.0000 = -11等等)。无论如何,这些是我测试过的一些案例:

  • 任何四舍五入到步骤 1 的数字都应该是它本身
  • -3 四舍五入到步骤 2 = -4
  • -2 四舍五入到步骤 2 = -2
  • 3 四舍五入到步骤 2 = 4
  • 2 四舍五入到步骤 2 = 2
  • -2.3 四舍五入到步长 0.2 = -2.4
  • -2.4 四舍五入到步长 0.2 = -2.4
  • 2.3 四舍五入到步长 0.2 = 2.4
  • 2.4 四舍五入到步长 0.2 = 2.4