Андрей Смирнов
Время чтения: ~6 мин.
Просмотров: 27

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция 1С Окр(Число) производит округление чисел 1С нужным способом. По-умолчанию – до целого.

Например:

  • Для округления числе 1С выполняем функцию 1С Окр(22.55)
  • 1С возвращает 22

Во-первых с помощью 1С ОКР можно проводить округление дробной части чисел 1С (то, что после запятой), например до сотых двух знаков):Результат = Окр(15.2233, 2); //15.22

Во-вторых с помощью 1С ОКР можно проводить округление целой части чисел 1С (то, что до запятой), например до тысяч (трех знаков):Результат = Окр(15333, -3); //15000

И наконец, третье. Как известно если остаток меньше 5 – то округляется до 0, а если больше 5, то округляется до 1.

Например:

  • 15.33 округляем как 15.3
  • 15.35 округляем как 15.4
  • 15.37 округляем как 15.4.

С помощью 1С ОКР можно изменить этот порядок:

  • 15.33 округляем как 15.3
  • 15.35 округляем как 15.3
  • 15.37 округляем как 15.4.

Только зарегистрированные пользователи VIP группы могут видеть этот контент.

Добавим в наш калькулятор новые кнопки «Окр».

Для операции нужен только один параметр, поэтому результат будет выводить сразу же по нажатию кнопки операции.

Чтобы узнать какую часть округлять и на сколько разрадов – запросим у пользователя число с помощью ВвестиЗначение().

В обработчик кнопки добавим новую ветку (как добавить новую ветку смотрите Сложение, вычитание, деление и умножение в 1С).

Пример программного кода:

Только зарегистрированные пользователи VIP группы могут видеть этот контент.

Математика в языке 1С 8.3, 8.2 (в примерах)

Всё для программиста >> Справочник языка 1С

Вступайте в мою группу помощник программиста.В ней мы обсуждаем программирование в 1С.

ДатаЕслиМассивы МатематикаПроцедурыСтрокиЦиклыДиалогиОписаниеТиповОперационнаяСистемаПриложениеСоответствиеСписокЗначенийСтруктураТаблицаЗначенийФайловаяСистемаФорматОбщиеОбъектыЗапросыПрикладныеОбъектыУниверсальныеФункции

lesson.png См. урок для начинающих по математическим операциям в 1С Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)video.png Смотреть видео с демонстрацией выполнения кода

Число

Описание:

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

Литералы:

Набор цифр, написанных непосредственно в тексте модуля вида: [+|-]{0|1|2|3|4|5|6|7|8|9}[.{0|1|2|3|4|5|6|7|8|9}] В качестве разделителя целой и дробной части используется «.» (точка).

&НаКлиенте Процедура ВыполнитьКод(Команда)       /// Как округлить число в 1с 8.3, 8.2       // https://ru.wikipedia.org/wiki/Округление       // до первого знака после запятой// случай когда (N + 1) знак < 5     Сообщить(Окр(321.123,1));// 321.1       // до первого знака после запятой// случай когда (N + 1) знак >= 5     Сообщить(Окр(321.163,1));// 321.2       // особый случай:// если при округлении до N-го знака// (N + 1)-й знак равен 5, а все последующие// знаки равны нулю, то результат округления// будет зависеть от третьего параметра функции Окр       Сообщить(Окр(100.350,1, РежимОкругления.Окр15как10));// вернёт 100.3     Сообщить(Окр(100.350,1, РежимОкругления.Окр15как20));// вернёт 100.4       // по умолчанию значение третьего параметра// равно РежимОкругления.Окр15как20 (округление в большую сторону)       /// Как получить целую часть числа в 1с 8.3, 8.2       Сообщить(Цел(12.654));// 12       /// Как возвести число в степень в 1с 8.3, 8.2       Сообщить(Pow(10,3));// 10^3 = 1000       /// Как извлечь квадратный корень из числа в 1с 8.3, 8.2       Сообщить(Sqrt(25));// 5       /// Как вычислить максимальное из нескольких значений в 1с 8.3, 8.2       Сообщить(Макс(1,2,3));// 3     Сообщить(Макс("aaa","bbb","ccc"));// ccc     Сообщить(Макс(ТекущаяДата(), ДобавитьМесяц(ТекущаяДата(),1)));     Сообщить(Макс(Истина,Ложь));// Истина       /// Как вычислить минимальное из нескольких значений в 1с 8.3, 8.2       Сообщить(Мин(1,2,3));// 1     Сообщить(Мин("aaa","bbb","ccc"));// aaa     Сообщить(Мин(ТекущаяДата(), ДобавитьМесяц(ТекущаяДата(),1)));     Сообщить(Мин(Истина,Ложь));// Ложь       /// Как вычислить выражение из строки в 1с 8.3, 8.2       Сообщить(Вычислить("1+2"));// 3     Сообщить(Вычислить("ИСТИНА И ЛОЖЬ"));// Нет     Сообщить(Вычислить("Sin(3.14)"));// ~0     Сообщить(Вычислить("Pow(Sin(3.14), 2) + Pow(Cos(3.14), 2)"));// ~1       /// Тригонометрия в 1с 8.3, 8.2       // углы выражаются в радианах       Пи =3.14;     E =2.718;// Число Эйлера http://ru.wikipedia.org/wiki/E_(число)       Сообщить(Cos(Пи /2));// ~0     Сообщить(ACos());// ~1,57       Сообщить(Sin(Пи /2));// ~1     Сообщить(ASin(1));// ~1,57       Сообщить(Sin(Пи /2)* Sin(Пи /2)+ Cos(Пи /2)* Cos(Пи /2));// ~1       Сообщить(Sin(Пи /3)/ Cos(Пи /3));// 1.73     Сообщить(Tan(Пи /3));// 1.73     Сообщить(Tan(ATan(1.73)));// 1.73       // экспонента - возведение числа эйлера в степень X// http://ru.wikipedia.org/wiki/Экспонента     Сообщить(Pow(E,2));// 7,389     Сообщить(Exp(2));// 7,389       // натуральный логарифм - степень в которую надо// возвести число эйлера e, чтобы получить X// http://ru.wikipedia.org/wiki/Натуральный_логарифм     Сообщить(Log(9));// 2,197     Сообщить(Pow(E,2.197));// ~9       // десятичный логарифм - степень в которую надо// возвести число 10, чтобы получить X// http://ru.wikipedia.org/wiki/Десятичный_логарифм     Сообщить(Log10(1000));// 3     Сообщить(Pow(10,3));// 1000       /// Как вывести число без пробелов в 1с 8.3, 8.2       Сообщить(Формат(1000000,"ЧГ=0"));// 1000000   КонецПроцедуры   /// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Математика в языке 1С 8.3, 8.2 (в примерах)

ДатаЕслиМассивы МатематикаПроцедурыСтрокиЦиклыДиалогиОписаниеТиповОперационнаяСистемаПриложениеСоответствиеСписокЗначенийСтруктураТаблицаЗначенийФайловаяСистемаФорматОбщиеОбъектыЗапросыПрикладныеОбъектыУниверсальныеФункции С уважением, (преподаватель школы 1С программистов и разработчик обновлятора).

Всё для программиста >> Справочник языка 1С

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю). Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

Milkin_Vladimir_Photo_180.jpgКак помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Используемые источники:

  • https://www.about1c.ru/v83/faq/how-round-numbers-to-upper
  • http://howknow1c.ru/jazyk-1s/1s-okr.html
  • https://helpme1c.ru/matematika-v-yazyke-1s-8-v-primerax

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации