Округление результатов арифметических операций в запросах
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
Методическая рекомендация (полезный совет)
1. Если в операции деления заранее известны порядки числителя и знаменателя, то следует по возможности избегать выполнения деления числа заведомого маленького порядка на число заведомо большого порядка. Например, вместо:
0.02 / 28346 * 9287492
0.02 * 9287492 / 28346
2. При выполнении арифметических операций в запросах к базе данных платформа 1С:Предприятия поддерживает точность вычислений до 8 разрядов дробной части. Однако, из-за особенностей работы различных СУБД в некоторых ситуациях точность результатов может отличаться от 8. Более подробно о вычислении разрядности результатов можно почитать в статье ИТС Разрядность результатов выражений и агрегатных функций в языке запросов.
Если точность результата выполнения запроса к базе данных, содержащего
- арифметические операции деления,
- агрегатные функции СРЕДНЕЕ ,
- арифметические операции умножения, если каждый из множителей может иметь дробную часть,
различается на различных СУБД, то рекомендуется к операндам и/ или результатам этих операций применять оператор явного приведения разрядности и точности числовых данных:
ВЫРАЗИТЬ(. КАК Число(m, n))
Оператор ВЫРАЗИТЬ следует применять к операндам, если на какой-нибудь СУБД точность получаемого результата недостаточна. Например, требуется 10 разрядов после запятой, а получается 6.
При этом указанная общая разрядность операндов должна быть минимальной, но не меньше той, которая достаточна для представления значений каждого из операндов. Неоправданное завышение разрядности может привести к потере точности последующих вычислений и несколько снизить скорость выполнения запроса.
Важно иметь в виду, что на разных СУБД имеются различные ограничения на максимальную разрядность десятичных чисел. Самое жесткое ограничение — это 31 разряд в целой и дробной частях. Чем меньшее значение разрядности будет указано для операндов, тем выше сможет быть точность результата. Например, если в результате требуется не менее 10 разрядов дробной части, первый операнд заведомо помещается в 15 разрядов целой части, а второй операнд заведомо помещается в 5 знаков целой части, то выражение может быть записано так:
ВЫБРАТЬ
ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель КАК Число(25,10)) / ВЫРАЗИТЬ(Таблица.Знаменатель КАК Число(15,10)) КАК Результат
ИЗ Таблица КАК Таблица
Оператор ВЫРАЗИТЬ следует применять к результату, если точность вычислений на всех СУБД достаточна, но на некоторых она больше, а на других меньше. При этом указанная общая разрядность результата должна быть минимальной, но не меньше той, которая достаточна для представления значений результата. Если в приведенном примере известно, что Знаменатель не может быть меньше 0.00001, то для представления результата достаточно 20 разрядов целой части. В этом случае выражение может быть записано так:
ВЫБРАТЬ
ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель / Таблица.Знаменатель КАК Число(30,10)) КАК Результат
ИЗ Таблица КАК Таблица
Иногда может быть целесообразно выполнить приведения к требуемой точности как операндов, так и результата. Например:
ВЫБРАТЬ
ВЫРАЗИТЬ(ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель КАК Число(25,10)) / ВЫРАЗИТЬ(Таблица.Знаменатель КАК Число(15,10)) КАК Число(30,10)) КАК Результат
ИЗ Таблица КАК Таблица
Как в 1с округлить до целого числа
как в 1с округлить число в меньшую сторону?
Например число 7,9 надо округлить до 7
Вот мое выражение, только округляет в большую
СтрокаТабличнойЧасти.КолКуп = ОКР(СтрокаТабличнойЧасти.цена/100*30/200);
А что по этому поводу говорит СП?
совсем СП украли
Цел (Int)
Синтаксис:
Цел()
Параметры:
(обязательный)
Тип: Число. Исходное число.
Возвращаемое значение:
Тип: Число. Результат выделения целой части.
Описание:
Вычисляет целую часть переданного числа, полностью отсекая дробную часть.
Пример:
МожноКупить = Цел(Наличность/Цена);
На крайняк отними 0.5 и округляй
Что-то в последнее время пошло много округлений.
(1) он не знает, что искать
ЕГЭ forever! люди уже не знают, что такое целая часть числа
в (0) вранье детектед, ОКР(7.9/100*30/200)=0 🙂
(5) вообще то я про 3-ий параметр «РежимОкругления»
Тип: Число.
Исходное число.
Тип: Число.
Определяет число знаков дробной части, до которых производится округление. Если параметр отрицательный, то число округляется до соответствующего разряда в целой части, начиная с младших разрядов.
Параметр обязательный, если указан параметр .
Значение по умолчанию: 0
(необязательный)
Тип: РежимОкругления.
Определяет режим округления. Помимо системного перечисления допускается использование числового параметра: 0 — если при округлении 1.5 = 1; 1 — если при округлении 1.5 = 2.
Значение по умолчанию: Окр15как20
т.е.
окр(бла-бла-бла,0, РежимОкругления.Окр15как10)
(9) а в меньшую сторону надо округлить что?
(9) Это не то, что нужно.
Автор неправильно использует терминологию. Ему нужно не округление, а отбрасывание дробной части. Как это делать, в теме уже ответили.
(11) Это почему ты так решил? Или ты задачу ставил?
Имхо у автора частный случай когда нужно целый, завтра понадобиться с точностью до 10 копеек, или до 100 руб.
Так что окр более универсальный в этом случае
Как в 1с округлить до целого числа
« Как стать программистом 1С » Язык 1С » 1С ОКР — округление чисел 1С
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. Функция округления числа 2. Применение для округления суммы в 1С 3. Режимы округления в 1С 8
В данной статье будет рассмотрено как проводить округление в1С 8.3 в большую сторону при помощи специальных функций. Также будут приведены примеры для определения округления в большую сторону в 1С.
1. Функция округления числа
В системе 1С есть специальная функция, которая помогает округлить число в большую сторону – это «ОкруглитьВбольшуюСторону()».
Рис. 1 Пример стандартного вида этой функции на скриншоте с кодом для серверного применения
Выше показан пример кода функции «ОкруглитьВбольшуюСторону()» для серверного применения. Ее же можно применить и для клиента в системе 1С:
Рис. 2 Округление в большую сторону в 1С Также можно рассмотреть функцию, которая совершает обычное округление числа в большую сторону, и проследить, как она отличается от «ОкруглитьВбольшуюСторону()». Это – функция Окр(). Например, если будет Окр(15.55), то возвращено будет простое число 15. При помощи данной функции, в отличие от предыдущей, которая производит округление до целого в большую сторону, можно убирать не целую часть от заданного числа. Также в ней можно устанавливать, до какого количества знаков будет проводится округление. Как пример, если будет Окр(15.2235), то в результате вернётся 15.22. Также данная функция может задавать сколько порядков в числе необходимо убрать. Например, если будет Окр(14567, -3), то вернётся значение 14000.
2. Применение для округления суммы в 1С

Рассмотрим, где можно на практике применять округление в большую сторону в 1С.
Например, запустим документ «ПоступлениеТоваровИУслуг». В нём нам необходимо проверить условие по возможности округления суммы. В случае, если округление необходимо произвести, то выведется окно с сообщением, в котором будет указано, сумму какого товара можно округлить. Как настроить округление в 1С, показано ниже:
Рис. 3 Округление суммы в 1С
3. Режимы округления в 1С 8
Также следует уделить внимание и другим режимам округления в системе 1С 8:
· Округление до первого знака после запятой при условии, что знак меньше пяти:
Рис. 4 Код для округления в 1С 8
· Округление до первого знака после запятой при условии, что знак больше, либо равен пяти:
Рис. 5 Пример кода округления 1С 8.3
· Округление до N-ного знака после запятой в случае, если N+1 = 5, а все остальные знаки равны нулям, то округляться будет по третьему параметру внутри функции по округлению числа:
Рис. 6 Функция округления числа
· Округление на основании целой части заданного числа, данная функция может быть также рассмотрена, как округление числа в большую сторону:
Рис. 7 Функция округления числа в большую сторону в 1С
Специалист компании «Кодерлайн» Айдар Фархутдинов