Округлить число до максимально 10
Мне нужно создать график, где масштаб по оси Y изменяется в зависимости от ввода данных в систему. Возможно, эта шкала может быть где угодно от 0-10, 0-100 или даже иметь нижний предел тысяч и верхний предел миллионов.
чтобы правильно определить масштаб этой оси, мне нужно разработать отношение точек к пикселям (на основе высоты/диапазона графика). Теперь ось графиков никогда не начинается с самого низкого значения и переходит к самому высокому, обычная практика до ближайшей к нам 2, 5 или 10 (выше верхнего предела и ниже нижнего) в зависимости от диапазона значений.
Так что я хотел бы знать как получить максимальное значение из набора данных, и округлить его до ближайшего 10. для уточнения входные значения будут всегда быть целыми.
теперь у меня есть вот это
if ((rangeMax < 10) && (rangeMax > 5))
rangeMax = 10;
else if (rangeMax < 5)
rangeMax = 5;
который полезен только для значений меньше 10 и не позволяет гибкости, необходимой для истинной динамики. В конечном счете этот график будет автоматически сгенерирован во время события загрузки страницы без ввода пользователем.
Я немного читал, и люди говорят о таких вещах, как оператор модуля ( % ), но я не могу найти никакой надежной информации об его использовании и говорить о математике.Потолок и математика.Круглые, но они идут к следующему ближайшему целому числу, которое не совсем там, и, кажется, не очень помогает при работе с целыми числами в любом случае. Любые предложения, указатели или помощь значительно оцененный.
Я нашел аналогичный вопрос, заданный здесь как я могу получить следующий самый высокий кратный 5 или 10 но я не знаю java, поэтому я не могу понять ничего из того, что было сказано.
Ура
5 ответов
if(rangeMax % 10 !=0)
rangeMax = (rangeMax - rangeMax % 10) + 10;
вы также можете использовать Math.Round()
С MidpointRounding.AwayFromZero
используя десятичное число (в противном случае целочисленное деление будет усекать дроби):
decimal number = 55M;
decimal nextHighest = Math.Round(number/ 10, MidpointRounding.AwayFromZero) * 10;
Если вы хотите перейти к следующему 10, вы можете использовать математику.Потолок выглядит следующим образом:
rangeMax = (int)(Math.Ceiling((decimal)rangeMax / 10) * 10);
Если нужно обобщить, чтобы перейти к следующему n
(например, 5 здесь), вы можете сделать:
int n = 5;
rangeMax = (int)(Math.Ceiling((decimal)rangeMax / n) * n);
что-то что может помочь разделить число на 10. Это должно округлить его до ближайшего целого числа. Затем умножьте его еще раз на 10, чтобы округлить число до ближайшего 10
Я использую это:
public static double RoundTo10(double number)
{
if (number > 0)
{
return Math.Ceiling(number / 10) * 10;
}
else
{
return Math.Floor(number / 10) * 10;
}
}
вы можете попробовать это....
decimal val = 95;
//decimal val =Convert.ToDecimal( textBox1.Text);
decimal tmp = 0;
tmp = (val % 10);
//MessageBox.Show(tmp.ToString()+ "Final val:"+(val-tmp).ToString());
decimal finval = val - tmp;