Вокруг к ближайшим пяти

Причина этого состоит в том, что с типом данных char, Вы сортируете строки как строку.

идея ORDER BY CAST() корректна, однако производительность этого понизится как количество возвращенных увеличений результатов.

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

, Если Вы действительно не можете изменить столбец и Вы имеете проблемы производительности, я предлагаю иметь столбец порядка сортировки, который содержит бросок значения к целому числу (будет аннулировать преобразованный в соответствующее значение).

Индекс столбец порядка сортировки и идеально, добавьте триггер к столбцу CHAR так, чтобы вставил или обновил к символьному триггеру значения обновление целочисленного значения.

67
задан Rob 4 January 2017 в 07:28
поделиться

3 ответа

Попробуйте:

Math.Round(value / 5.0) * 5;
118
ответ дан 24 November 2019 в 14:29
поделиться

Это работает:

5* (int)Math.Round(p / 5.0)
46
ответ дан 24 November 2019 в 14:29
поделиться

Вот простая программа, которая позволяет вам проверить код. Помните о параметре MidpointRounding, без него вы получите округление до ближайшего четного числа, что в вашем случае означает разницу в пять (в примере 72,5).

    class Program
    {
        public static void RoundToFive()
        {
            Console.WriteLine(R(71));
            Console.WriteLine(R(72.5));  //70 or 75?  depends on midpoint rounding
            Console.WriteLine(R(73.5));
            Console.WriteLine(R(75));
        }

        public static double R(double x)
        {
            return Math.Round(x/5, MidpointRounding.AwayFromZero)*5;
        }

        static void Main(string[] args)
        {
            RoundToFive();
        }
    }
13
ответ дан 24 November 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: