0

Как округлить число в большую сторону?

Надеюсь, Вы знакомы с функцией Окр(), которая позволяет округлить дробное число до ближайшего целого. Все когда-нибудь ею пользовались. Но всё меняется, когда Вам требуется округлить числовое значение строго в большую сторону.Бывалый программист сразу же бросится за изобретение колеса. Через пару минут родится новая функция, например, такая:

НовоеЗначение = Цел(ИсходноеЗначение) + 1;

Проверочное выражение Цел(1.1) + 1 = 2, введенное в табло, убеждает в правильности выбранного пути, и новоиспеченное колесо начинает молотить ошибки, т.к. на проверку функции на всем диапазоне значений чего-то не хватило (надеюсь, что времени ;D). В итоге получается, что функция даже целые значения округляет вверх Цел(1) + 1 = 2

Найденное решение может быть более изощренным, например, таким:

НовоеЗначение = Окр(ИсходноеЗначение + 0.5, 0, 0);

Давайте разберем его подробнее: второй параметр функции Окр() указывает на необходимость округления до целого числа, а третий параметр заставляет воспринимать промежуточное значение 0.5 как 0 (ноль). И для того, чтобы спровоцировать округление в большую сторону, программист сознательно прибавляет к исходному значению число 0.5. Теперь, если исходное значение будет больше целого хотя бы на сотую, тысячную или миллионную долю, оно всегда будет округляться вверх.

Теперь ложка дегтя: округляться вверх будут и отрицательные значения. С математической точки зрения -2 меньше -1, но оригинальная функция Окр() выполняет округление по модулю, а не по математическим правилам. Поэтому программист должен подумать и над тем, как ему нужно округлять отрицательные значения.

Таким образом, если Вам нужен пример функции, выполняющей округление в большую сторону по аналогии с функцией Окр(), Вы попали куда нужно:

Функция ОкрВверх(ИсходноеЗначение)
       
     Перем НовоеЗначение;
     
     Если ИсходноеЗначение >= 0 Тогда
        НовоеЗначение = Окр(ИсходноеЗначение + 0.5, 0, 0);
     Иначе
        НовоеЗначение = Окр(ИсходноеЗначение - 0.5, 0, 0);
     КонецЕсли;
     
     Возврат НовоеЗначение;
	
КонецФункции

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *