Округлить число до следующего HIGHEST 10 - PullRequest
7 голосов
/ 30 декабря 2011

Мне нужно создать график, где масштаб оси Y меняется в зависимости от ввода данных в систему.Возможно, эта шкала может быть где угодно от 0 до 10, от 0 до 100 или даже иметь нижний предел в тысячи и верхний предел в миллионах.

Чтобы правильно определить масштаб этой оси, мне нужно определить соотношениеточек на пиксели (в зависимости от высоты / диапазона графика).Теперь ось графиков никогда не начинается с самого низкого значения и не достигает самого высокого значения, обычная практика - переходить к следующим ближайшим 2, 5 или 10 (выше для верхнего предела и ниже для нижнего) в зависимости от диапазона значений.

Итак, я хотел бы знать, как извлечь максимальное значение из набора данных и округлить его до ближайшего значения 10. Для пояснения входные значения будут всегда целыми числами.

, что у меня сейчас есть, это

        if ((rangeMax < 10) && (rangeMax > 5))
            rangeMax = 10;
        else if (rangeMax < 5)
            rangeMax = 5;

, которое полезно только для значений меньше 10 и не позволяет гибкости, требуемой быть действительно динамичной.В конечном итоге этот график будет автоматически сгенерирован во время события загрузки страницы без ввода данных пользователем.

Я немного прочитал, и люди говорят о таких вещах, как оператор модуля (%), но я могу 'Я не могу найти надежную информацию о его использовании, а также поговорим о Math.Ceiling и Math.Round, но они относятся к следующему ближайшему целому числу, которого там нет, и, похоже, совсем не помогают при работе св любом случае целые числа.Будем благодарны за любые предложения, указатели или помощь.

я нашел похожий вопрос, заданный здесь Как я могу получить следующий по величине кратный 5 или 10 , но я не знаю Java, такЯ не могу понять, что было сказано.

Приветствия

Ответы [ 5 ]

21 голосов
/ 30 декабря 2011
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;
3 голосов
/ 30 декабря 2011

Если вы хотите перейти к следующим 10, вы можете использовать Math.Ceiling следующим образом:

rangeMax = (int)(Math.Ceiling((decimal)rangeMax / 10) * 10);

Если вам нужно обобщить, чтобы перейти к следующему n (например, 5 здесь), вы можете сделать:

int n = 5;    
rangeMax = (int)(Math.Ceiling((decimal)rangeMax / n) * n);
2 голосов
/ 10 ноября 2017

Я использую ЭТО:

public static double RoundTo10(double number)
        {
            if (number > 0)
            {
                return Math.Ceiling(number / 10) * 10;
            }
            else
            {
                return Math.Floor(number / 10) * 10;
            }
        }
2 голосов
/ 30 декабря 2011

Что может помочь, так это разделить число на 10. Это должно округлить его до ближайшего целого числа. Затем снова умножьте его на 10, чтобы округлить число до ближайшего 10

0 голосов
/ 01 июня 2012

вы можете попробовать это ....

            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;
...