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

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

Round down 43 becomes 40 143 becomes 140 1433 becomes 1430 Round up 43 becomes 50 143 becomes 150 1433 becomes 1440 

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

 £143 - £193 

其中我想表现为:

 £140 - £200 

因为它看起来更清洁

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

我只想创建一些方法;

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

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

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

这有效:

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

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

 int RoundNum(int num) { int rem = num % 10; return rem >= 5 ? (num - rem + 10) : (num - rem); } 

使用非常简单:

 Console.WriteLine(RoundNum(143)); // prints 140 Console.WriteLine(RoundNum(193)); // prints 190 

将数字除以10。

 number = number / 10; Math.Ceiling(number);//round up Math.Round(number);//round down 

然后乘以10。

 number = number * 10; 

将数字舍入到另一个数字的倍数的一般方法, 从零开始四舍五入。

对于整数

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

对于浮动

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

我知道有些部分可能看起来违反直觉或不太优化。 我尝试将(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