Созданный в алгоритме .NET к круглому значению к ближайшим 10 интервалам

63
задан Radderz 30 September 2013 в 23:06
поделиться

4 ответа

Нет никакой встроенной функции в библиотеке классов, которая сделает это. Самое близкое Система. Математика. Вокруг () , который является только для округления чисел Десятичного числа типов и Вдвое больше по сравнению с самым близким целочисленным значением. Однако можно обернуть оператор в дополнительном методе, если Вы работаете с.NET 3.5, который позволит Вам использовать функцию намного более чисто.

public static class ExtensionMethods
{
    public static int RoundOff (this int i)
    {
        return ((int)Math.Round(i / 10.0)) * 10;
    }
}

int roundedNumber = 236.RoundOff(); // returns 240
int roundedNumber2 = 11.RoundOff(); // returns 10

, Если Вы программируете против более старой версии платформы.NET, просто удалите "это" из функции RoundOff и вызовите функцию как так:

int roundedNumber = ExtensionMethods.RoundOff(236); // returns 240
int roundedNumber2 = ExtensionMethods.RoundOff(11); // returns 10
94
ответ дан Chris Charabaruk 24 November 2019 в 16:18
поделиться

Используйте Математику. Потолок, чтобы всегда окружить.

int number = 236;
number = (int)(Math.Ceiling(number / 10.0d) * 10);

Модуль (%) получает остаток, таким образом, Вы добираетесь:

// number = 236 + 10 - 6

Помещенный, что в дополнительный метод

public static int roundupbyten(this int i){
    // return i + (10 - i % 10); <-- logic error. Oops!
    return (int)(Math.Ceiling(i / 10.0d)*10); // fixed
}

// call like so:
int number = 236.roundupbyten();

выше отредактированного: Я должен был пойти со своим первым инстинктом для использования Математики. Потолок

я занесенный в блог об этом при вычислении контрольных разрядов UPC .

20
ответ дан Armstrongest 24 November 2019 в 16:18
поделиться

Округление плавания к целому числу подобно (интервалу) (x+0.5), в противоположность простому кастингу x - если Вы хотите несколько из 10, можно легко адаптировать это.

, Если Вы просто хотите сделать целочисленную математику и округляете ее к десять, попробуйте (x+10/2)/10*10.

Редактирование: я заметил, что этот ответ не удовлетворяет запросу автора оригинала и является также смещенной формой округления этого, я предпочитаю не делать. Однако другой принятый ответ уже указал Math.round (), намного лучшее решение.

4
ответ дан Raymond Martineau 24 November 2019 в 16:18
поделиться

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

Я пробовал это:

public int RoundOff(int number, int interval){
    int remainder = number % interval;
    number += (remainder < interval / 2) ? -remainder : (interval - remainder);
    return number;
}

Для использования:

int number = 11;
int roundednumber = RoundOff(number, 10);

Таким образом, у вас есть выбор, будет ли половина интервала округляться в большую или меньшую сторону. =)

8
ответ дан 24 November 2019 в 16:18
поделиться
Другие вопросы по тегам:

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