将整数四舍五入到最接近10的倍数
本文关键字:最接近 整数 四舍五入 | 更新日期: 2023-09-27 18:01:37
我想弄清楚如何四舍五入价格-两种方式。例如:
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
会让你得到最接近的十分之一,要舍入你只需要减去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
一种将一个数舍入为另一个数的倍数的通用方法。
为整数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
等)给出了错误的结果。无论如何,这些是我测试的几个案例:
- 任何四舍五入到step 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
将数字除以10
number = number / 10;
Math.Ceiling(number);//round up
Math.Round(number);//round down
然后乘以10
number = number * 10;
public static int Round(int n)
{
// Smaller multiple
int a = (n / 10) * 10;
// Larger multiple
int b = a + 10;
// Return of closest of two
return (n - a > b - n) ? b : a;
}