Внутренний язык программирования 1С 8.3 для начинающих программистов: математика в 1С
Автор уроков и преподаватель школы: Владимир Милькин
На одном из первых занятий мы уже разбирали использование арифметических операций в 1С 8.3. Конечно, это не все математические операции, которые доступны разработчику и сегодня мы восполним этот пробел.
Ваша задача на этом уроке воспроизводить все примеры у себя на компьютере в модуле управляемого приложения.
Математические операции в 1С
Представим, что у нас есть число с дробной частью:
Цена = 100.384; |
И мы хотим округлить его дробную часть до первого знака после запятой:
ОкругленнаяЦена = Окр(Цена, 1); // вернёт 100.4 |
Мы воспользовались командой Окр, которая принимает число и количество знаков дробной части после которых нужно округлить значение.
В качестве результата округления мы получим 100.4. Но почему не 100.3?
Всё потому, что команда Окр делает округление к ближайшему целому. Другими словами, при округлении до N-го знака, мы смотрим на число, которое расположено следом (в позиции N + 1). И если это число < 5, то N-й знак сохраняет своё значение, иначе если это число >= 5, то N-й знак увеличивается на единицу.
В нашем случае мы округляем до первого знака, значит смотрим на второй знак. Там 8, она больше или равна 5, значит первый знак (там 3) мы увеличиваем на единицу. Получаем 100.4.
Отдельного рассмотрения требуют правила округления, если (N + 1)-й знак равен 5, а последующие знаки равны нулю.
Например, мы хотим округлить число 100.350 до первого знака. В этом случае мы можем явно задать в какую сторону делать округление (в меньшую или большую). За это отвечает третий параметр команды Окр:
Сообщить(Окр(100.350, 1, РежимОкругления.Окр15как10)); // вернёт 100.3 Сообщить(Окр(100.350, 1, РежимОкругления.Окр15как20)); // вернёт 100.4 |
Значение этого параметра по умолчанию равно РежимОкругления.Окр15как20 (округление в большую сторону).
Ещё раз обращаю ваше внимание, что третий параметр оказывает влияние на результат только тогда, когда мы:
- округляем до N-го знака
- N + 1 знак равен 5
- а все знаки начиная с N + 2 равны нулю
А теперь давайте отбросим дробную часть числа, чтобы осталась только целая часть:
ЦелаяЧасть = Цел(Цена); // вернёт 100 |
Мы воспользовались командой Цел, которая принимает число с дробной частью и возвращает только его целую часть.
Иногда при расчётах требуется возвести число в степень:
ДесятьВКубе = Pow(10, 3); // вернёт 1000 |
Команда Pow принимает число и степень в которую его нужно возвести. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
А порою нам требуется, наоборот, к примеру извлечь квадратный корень из числа:
КвадратныйКореньИз25 = Sqrt(25); // вернёт 5 |
Ещё задача. Пусть у нас имеется конечный набор чисел и нужно найти максимальное значение:
МаксимальноеЗначениеИзТрёхЧисел = Макс(10, 20, 30); // вернёт 30 МаксимальноеЗначениеИзДвухЧисел = Макс(0, -5); // вернёт 0 |
Количество параметров, которые можно передавать в функцию Макс для поиска максимального элемента неограниченно.
Функция Мин решает обратную задачу:
МинимальноеЗначениеИзТрёхЧисел = Мин(10, 20, 30); // вернёт 10 МинимальноеЗначениеИзДвухЧисел = Мин(0, -5); // вернёт -5 |
Ещё очень популярной задачей является генерация случайных чисел. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. В 1С это делается таким образом:
ГСЧ = Новый ГенераторСлучайныхЧисел(); Сообщить(ГСЧ.СлучайноеЧисло(0, 2)); |
Первой строкой мы создаём объект ГенераторСлучайныхЧисел и связываем с ним нашу переменную ГСЧ.
Во второй строке мы вызываем команду этого генератора СлучайноеЧисло, которая в качестве параметров принимает левую и правую границы (включительно) диапазона в котором требуется генерировать случайные числа.
В приведенном примере вы каждый раз будете запускать программу и она каждый раз будет вам выдавать новое число от нуля (включительно) до двух (включительно). Это и есть генерация случайных чисел.
С более полным перечнем математических функций в 1С вы можете ознакомиться в справочнике по языку (ссылка).