2

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

Наверняка Вы уже знаете о встроенных числовых функциях Цел() и Окр() встроенного языка.

Первая округляет число строго вниз, а вторая — вверх или вниз по математическим правилам. Но как быть, когда нужно округлить значение строго вверх?

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

Функция ОкрВверх(ИсходноеЧисло)
	
	Возврат Цел(ИсходноеЧисло) + 1;
	
КонецФункции

Однако, «дьявол кроется в мелочах»: данная функция будет возвращать некорректный результат в случае, когда результат деления представляет собой целое число. Изучите следующие тестовые примеры:

Значение = ОкрВверх(10 / 3);
Сообщить("10/3=" + Значение);
//	10/3=4
Значение = ОкрВверх(10 / 5);
Сообщить("10/5=" + Значение);
//	10/5=3

Чтобы не попасть в такую логическую ловушку, необходимо учитывать тот факт, что результат деления может быть целым числом. А сама функция округления вверх может выглядеть так:

Функция ОкрВверх(ИсходноеЧисло)
	
	Если Цел(ИсходноеЧисло) = ИсходноеЧисло Тогда
		Возврат ИсходноеЧисло;
	Иначе
		Возврат Цел(ИсходноеЧисло) + 1;
	КонецЕсли;
	
КонецФункции

или с применением тернарного оператора так:

Функция ОкрВверх(ИсходноеЧисло)
	
	Возврат ?(Цел(ИсходноеЧисло) = ИсходноеЧисло, ИсходноеЧисло, Цел(ИсходноеЧисло) + 1);
	
КонецФункции

Теперь, если еще раз прогнать тестовые примеры, Вы получите корректные результаты.

UPD 2022.12.08
Роман в комментариях резонно заметил, что приведенные функции работают только с положительными числами. Ну что ж, вот универсальный вариант:

Функция ОкрВверх(ИсходноеЧисло)
    
    Перем Знак, МодульЧисла;
    
    Знак = ?(ИсходноеЧисло < 0, -1, 1);
    МодульЧисла = ?(ИсходноеЧисло < 0, -ИсходноеЧисло, ИсходноеЧисло);
    
    Возврат Знак * ?(Цел(МодульЧисла) = МодульЧисла, МодульЧисла, Цел(МодульЧисла) + 1);
    
КонецФункции

Читайте также:

  1. Что такое тернарный оператор в 1с?

Поделиться страницей в соц.сетях

2 комментария к записи “Как в 1с 8 округлить в большую сторону?

  1. Метод хороший, но не работает для отрицательных чисел. Например, число -4,7 при округлении в большую сторону должно давать -4, а ваш метод дает -3.

  2. Роман, дьявол кроется в мелочах)) На практике редко приходится иметь дело с отрицательными числами, поэтому они и не учитывались. Но идея для доработки материала хорошая)

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

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