Округлить число до максимально 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;