База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как округлить число в меньшую сторону с заданной точностью в 1С? › Ответ в теме: Как округлить число в меньшую сторону с заданной точностью в 1С?
Михаил, для округления произвольного числа в меньшую сторону с заданной точностью в 1С можно использовать функцию Цел(), которая отсекает дробную часть числа, и при этом нужно учитывать разрядность (точность) округления. Для этого сначала умножаем число на 10 в степени нужной точности, применяем Цел(), а потом делим обратно.
Пример функции на 1С:
|
1 2 3 4 5 6 7 |
Функция ОкруглитьВМеньшуюСторону(Число, Точность) // Число - исходное число // Точность - количество знаков после запятой для округления Множитель = Степень(10, Точность); Результат = Цел(Число * Множитель) / Множитель; Возврат Результат; КонецФункции |
Пример использования:
|
1 2 |
Сообщить(ОкруглитьВМеньшуюСторону(12.3456, 2)); // Выведет 12.34 Сообщить(ОкруглитьВМеньшуюСторону(-12.3456, 2)); // Выведет -12.35 |
Обратите внимание, что для отрицательных чисел функция Цел() округляет в сторону меньшего целого (то есть -12.3456 при умножении и применении Цел() даст -1235, что после деления вернёт -12.35), что соответствует математическому округлению вниз.
Если нужно именно округление в сторону нуля (отбрасывание дробной части без смещения для отрицательных), тогда для отрицательных чисел нужно использовать другую логику.
Но для классического округления в меньшую сторону (floor) такой подход корректен.
Если нужна функция с учётом отрицательных чисел и округлением в сторону нуля, то можно сделать так:
|
1 2 3 4 5 6 7 8 9 |
Функция ОкруглитьВМеньшуюСторону_ОтНуля(Число, Точность) Множитель = Степень(10, Точность); Если Число >= 0 Тогда Результат = Цел(Число * Множитель) / Множитель; Иначе Результат = Цел(Число * Множитель - 1) / Множитель; КонецЕсли; Возврат Результат; КонецФункции |
Но чаще всего для округления вниз (floor) достаточно первой функции.
—
Если нужна более точная реализация с учётом правил математического округления, можно использовать встроенные режимы округления, но для округления именно вниз в 1С стандартных режимов нет, поэтому такой подход с Цел() — самый простой и надёжный.
—
Если нужно, могу помочь с реализацией и тестами.