Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
10 окт 2024, 22:48

Работа с числами

Автор Кот_Леопольд, 12 сен 2018, 08:16

0 Пользователей и 1 гость просматривают эту тему.

Кот_Леопольд

И снова здравствуйте. Помогите с написанием кода. Нужно число округлять до 5/10, примерно условие думаю должно быть таким:
Если десятичная часть числа от 0,1 до 0,5 То целая часть числа + 0,5  Иначе
Если десятичная часть числа от 0,6 до 0,9 То целая часть числа + 1
Можно ли от числа отделять десятичные части?
Можно в свойствах реквизита указать что число нужно округлять до 0,5?

alexandr_ll

Цитата: Кот_Леопольд от 12 сен 2018, 08:16
И снова здравствуйте. Помогите с написанием кода. Нужно число округлять до 5/10, примерно условие думаю должно быть таким:
Если десятичная часть числа от 0,1 до 0,5 То целая часть числа + 0,5  Иначе
Если десятичная часть числа от 0,6 до 0,9 То целая часть числа + 1
Можно ли от числа отделять десятичные части?
Можно в свойствах реквизита указать что число нужно округлять до 0,5?

Вот, например как сделано В Торговле и склад 7.7
// глОкруглить(Числ, ПорядокОкругления)
//
// Параметры:
//  Числ              - исходное число
//  ПорядокОкругления - элемент перечисления Порядки окгугления:
//  "шаг" округления (0.01 (арифметическое), 0.01, 0.05, 0.1, 0.5, 1, 5, 10, 50, 100)
//
// Возвращаемое значение:
//  Округленное по заданному порядку значение
//
// Описание:
//  Округляет число вверх по заданному порядку. Т.е число 123.37 при порядке
//  округление 0.5 превратиться в 123.50, а число 0.1 при порядке округления
//  5 станет равным 5.
//  Если значение перечисления ОкрТочно, то округляет арифметически до 0.01
//
Функция глОкруглить(Числ, ПорядокОкругления) Экспорт
Перем Рез;

Если ПорядокОкругления = Перечисление.ПорядкиОкругления.ОкрТочно Тогда

// арифметическое округление до 2-х знаков после запятой
Рез = Окр(Числ, 2);
Иначе
// округление к верхней границе по заданному порядку

// преобразуем порядок округления число
Порядок = Число(Строка(ПорядокОкругления));

// вычислим количество интервалов, входящих в число
КолвоИнтервал = Числ / Порядок;

// вычислим целое количество интервалов.
КолвоИнтервалЦел= Цел(КолвоИнтервал);

Если КолвоИнтервал = КолвоИнтервалЦел Тогда
// Числа поделились нацело. Округлять не нужно.
Рез = Числ;
Иначе
Рез = Порядок * (КолвоИнтервалЦел + 1);
КонецЕсли;

КонецЕсли;

Возврат Рез;
КонецФункции // глОкруглить()

Кот_Леопольд

Вроде разобрался. Вот что получилось:
Число = Х;
Если  Окр(Х,0,0) >= Окр(Х,1,0)  Тогда
      Число = Окр(Х,0,0);
Иначе
     Если Окр(Х,0,0) < Окр(Х,1,0) Тогда
          Число = Окр(Х,0,0)+ 0.5;
КонецЕсли;
    КонецЕсли;
Проверил работает

depb

Вот же любители изобретать велосипед. В 1с уже все есть. В тексте модуля правой кнопкой мыши - конструктор форматной строки, а там выбираешь, какой формат тебе нужен - с точкой, без, количество знаков после запятой и т.д. Тоже самое с датой.

Sy4a

Цитата: depb от 13 сен 2018, 12:15Вот же любители изобретать велосипед. В 1с уже все есть. В тексте модуля правой кнопкой мыши - конструктор форматной строки, а там выбираешь, какой формат тебе нужен - с точкой, без, количество знаков после запятой и т.д. Тоже самое с датой.
Задача была округлять десятичный остаток числа в большую сторону чтоб был кратным 5, а ты тут нам про формат какойто говоришь в котором нет настроек округления кратному 5 и нет функции стандартной для такого округления.
Цитата: Кот_Леопольд от 12 сен 2018, 09:55Вроде разобрался. Вот что получилось:Число = Х;Если  Окр(Х,0,0) >= Окр(Х,1,0)  Тогда       Число = Окр(Х,0,0);Иначе      Если Окр(Х,0,0) < Окр(Х,1,0) Тогда           Число = Окр(Х,0,0)+ 0.5;КонецЕсли;    КонецЕсли;Проверил работает
В одну строчку решается как то так:
Если Цел(Х)-окр(Х,0,0)= 0 и Цел(Х)<>Х тогда Число =Цел(Х)+0.5 иначе Число =окр(Х,0,0) конецЕсли
Впринципе тоже самое что и у вас только без двойного если и выглядит как по мне по красивее и нагляднее чтоли:).
Что у вас что и у меня если число будет например 1.51 то оно округлится до 2 а не до 1.5, это для вас правильно или нет? Если нет то сначала надо до десятых число округлить а уж потом делать кратным 5 и вот тут уже поможет формат:
Число=Формат(Х,"ЧДЦ=1");
Которое округлит по правилу 1.55=1.6


Кот_Леопольд

ЦитироватьЧто у вас что и у меня если число будет например 1.51 то оно округлится до 2 а не до 1.5, это для вас правильно или нет?
Да, для меня как раз такое решение самое что ни на есть верное. Спасибо большое, ваш вариант действительно по симпатичней будет.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск