Округление целых чисел до ближайшего кратного 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
как это выглядит намного чище
есть идеи о том, как я могу этого достичь?
5 ответов
Я бы просто создал пару методов;
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
разделить число на 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