Содержание
Наверняка Вы уже знаете о встроенных числовых функциях Цел() и Окр() встроенного языка.
Первая округляет число строго вниз, а вторая — вверх или вниз по математическим правилам. Но как быть, когда нужно округлить значение строго вверх?
В этом случае без написания собственной функции не обойтись. Наспех составленный алгоритм будет к частному, обрезанному функцией Цел() добавлять единицу. А простейшая функция будет выглядеть примерно так:
Функция ОкрВверх(ИсходноеЧисло)Возврат Цел(ИсходноеЧисло)+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С.
ДатаЕслиМассивы МатематикаПроцедурыСтрокиЦиклыДиалогиОписаниеТиповОперационнаяСистемаПриложениеСоответствиеСписокЗначенийСтруктураТаблицаЗначенийФайловаяСистемаФорматОбщиеОбъектыЗапросыПрикладныеОбъектыУниверсальныеФункции
См. урок для начинающих по математическим операциям в 1С Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать) Смотреть видео с демонстрацией выполнения кода
Число
Описание:
Числовым типом может быть представлено любое десятичное число. Над данными числового типа определены основные арифметические операции: сложение, вычитание, умножение и деление. Максимально допустимая разрядность числа 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С, всё выкладываю там в первую очередь. |
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Используемые источники:
- 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