Как округлить до ближайшего числа кратному пяти?

1. VKuser384403765 2 10.09.19 14:39 Сейчас в теме
Не подскажите, как в Количество Мест, да и вообще в коде округлять числа равные 5.
Хотя это уже не округление называется)

Нужно что бы цифры округлить число 0.5 и целое. По "ПОЛОВИНКЕ"
Пример:

2.4 = 2.5
4.2 = 4.0
26.9 = 27.
44.7 = 44.5
Кстати, с точки зрения математики 3 и 8 куда идут? К целому или дробному?
Найденные решения
8. dhurricane 10.09.19 15:44 Сейчас в теме
(7)
в заголовке темы четко написано кратно 5
Да, здесь есть путаница: заголовок поста не соответствует примеру в теле поста. Т.к. текст поста я понять до конца не смог, то ориентировался исключительно на пример.

ЗарплатаКадрыКлиентСервер.Округлить(ОкруглитьДробьДоЦелогоНашМетод(2.4), 5))
Это лишнее. Приведенная Вами функция нормально считает и до дробной точности:
ЗарплатаКадрыКлиентСервер.Округлить(2.4, 0.5)
robertrodrigez; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
11. shatunovs 11.09.19 20:55 Сейчас в теме
(1) Принцип прост: у нас есть готовое округление до единиц. А надо до половинок. Значит, надо округлить удвоенное число до единиц и поделить это пополам.
Еще у нас есть округление до заданного числа десятичных знаков. Можно поделить на пять, округлить до десятых и обратно помножить на пять.
2. dhurricane 10.09.19 14:41 Сейчас в теме
Результат = Окр(Значение * 2)/2;
shkiper1829; harmer; +2 Ответить
3. VKuser384403765 2 10.09.19 15:27 Сейчас в теме
(2)
зультат = Окр

Не подскажите, как округлить Количество Мест? Она у меня в дробном виде. Да понимаю не правильно, но все же. Мне нужно что бы было по половинке.
4. dhurricane 10.09.19 15:29 Сейчас в теме
(3) Извините, я не понимаю Вашего вопроса. Вы не знаете, как применить приведенную мной формулу? Или она не решает Вашу задачу, т.к. я не правильно понял ее условие?
5. VmvLer 10.09.19 15:29 Сейчас в теме
(2) не катит, из отладки

Окр(2 * 2)/2 2
Окр(3 * 2)/2 3
Окр(8 * 2)/2 8

все уже придумано до нас

ЗарплатаКадрыКлиентСервер.Округлить(2, 5) 0
ЗарплатаКадрыКлиентСервер.Округлить(3, 5) 5
ЗарплатаКадрыКлиентСервер.Округлить(8, 5) 10


// Округляет число до заданной точности по указанному правилу.
//
// Параметры:
//  Число    - Число - число, которое необходимо округлить.
//  Точность - Число - "базис", до которого нужно округлить заданное число.
//  Правило  - ПеречислениеСсылка.ПравилаОкругленияПриРасчетеЗарплаты.
//
// Возвращаемое значение:
//   Число - округленное до заданной точности значение.
//
Функция Округлить(Число, Точность = 0, Правило = Неопределено) Экспорт
	
	// Если надо округлить 0 или точность не задана, то возвращаем заданное число.
	Если Не ЗначениеЗаполнено(Число) 
		Или Точность <= 0 Тогда
		Возврат Число
	КонецЕсли;
	
	Множитель  		= Число / Точность;
	ЦелыйМножитель 	= Цел(Множитель);
	
	Если Множитель = ЦелыйМножитель Тогда
		Результат = Число;
	Иначе
		Результат = Точность * Окр(Множитель);
		
		Если Правило = ПредопределенноеЗначение("Перечисление.ПравилаОкругленияПриРасчетеЗарплаты.ВБольшуюСторону") Тогда
			Результат = Точность * (ЦелыйМножитель + 1);
		ИначеЕсли Правило = ПредопределенноеЗначение("Перечисление.ПравилаОкругленияПриРасчетеЗарплаты.ВМеньшуюСторону") Тогда
			Результат = Точность * ЦелыйМножитель;
		КонецЕсли; 
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции
Показать


Велосипедистам которые тут вопят, что читать общие модули это плохо, а писать свои костыли это гуд - привет.
6. dhurricane 10.09.19 15:36 Сейчас в теме
(5) Как я понял, округлять то нужно до 0.5, а не до 5. В приведенной Вами функции ровно тот же алгоритм, только с дополнительной опцией, в какую сторону округлять.

В свою защиту против велосипедиста скажу, что попросту никогда не работал с подсистемой ЗУП, а потому ни разу не видел функцию "Округлить", только и всего. Полностью все общие модули же не перечитаешь и не удержишь в голове.
7. VmvLer 10.09.19 15:39 Сейчас в теме
(6) в заголовке темы четко написано кратно 5, думаю необходимо округлять дробные числа кратно целому 5.

Тогда сначала избавляемся от дроби можно согласно вашему обернуть в функцию и уже потом типовой
ЗарплатаКадрыКлиентСервер.Округлить(ОкруглитьДробьДоЦелогоНашМетод(2.4), 5))


проверил в отладке работает

ЗарплатаКадрыКлиентСервер.Округлить(2.4, 5) 0 Число
ЗарплатаКадрыКлиентСервер.Округлить(4.2, 5) 5 Число
ЗарплатаКадрыКлиентСервер.Округлить(26.9, 5) 25 Число
ЗарплатаКадрыКлиентСервер.Округлить(44.7 , 5) 45 Число
8. dhurricane 10.09.19 15:44 Сейчас в теме
(7)
в заголовке темы четко написано кратно 5
Да, здесь есть путаница: заголовок поста не соответствует примеру в теле поста. Т.к. текст поста я понять до конца не смог, то ориентировался исключительно на пример.

ЗарплатаКадрыКлиентСервер.Округлить(ОкруглитьДробьДоЦелогоНашМетод(2.4), 5))
Это лишнее. Приведенная Вами функция нормально считает и до дробной точности:
ЗарплатаКадрыКлиентСервер.Округлить(2.4, 0.5)
robertrodrigez; +1 Ответить
9. VmvLer 10.09.19 15:47 Сейчас в теме
(8) да, я уже проверил и исправил сообщение до вашего теста.

цель не помочь страждущему, а запомнить самому.
по большему счету мне тут побарабану кто чего справшивает.
главное спрашивают то, что может пригодиться
и я ищу решения прежде всего для себя.
10. shatunovs 11.09.19 20:51 Сейчас в теме
(6) Да и придумать такое выражение быстрее, чем заучивать функции общих модулей, по-моему. Если оно надо раз в пять лет, функции модулей за это время раза три поменяются уже.
12. shatunovs 11.09.19 20:59 Сейчас в теме
(5) Настаиваю: такую элементарную мелочь выискивать в общих модулях, если она нужна раз в несколько лет - плохо! Понять однажды, из любого источника, даже общего модуля, если оно случайно встретилось - хорошо. Но общие модули - не детективы. И читать их просто так - это для особо извращенных умов. А вот придумать простое решение по ходу - хорошо.
13. user856012 13 11.09.19 21:13 Сейчас в теме
(12)
общие модули - не детективы. И читать их просто так - это для особо извращенных умов. А вот придумать простое решение по ходу - хорошо.
Именно способность придумать свой алгоритм отличает программиста от 1Сника - последний полагается исключительно на функции платформы или типовых конфигураций.
14. shatunovs 11.09.19 21:20 Сейчас в теме
(13) Окр(,) - функция платформы. Как округление к единице использовать для округления к любой кратности - это, извините, элементарная задачка по арифметике, которую любому кодеру знать неплохо бы, даже 1С-нику :)
15. user856012 13 11.09.19 21:27 Сейчас в теме
(14)
элементарная задачка по арифметике, которую любому кодеру знать неплохо бы, даже 1С-нику
Ничего не имею против, просто переадресую это пожелание настаивающим на использовании модуля ЗарплатаКадрыКлиентСервер в задаче определения количества мест... интересно, мест чего? Штатного расписания, наверное? ;)
16. shatunovs 11.09.19 21:58 Сейчас в теме
(15)
интересно, мест чего?

ХЗ. Места еще фигурируют, например, в накладных. Где-то это упаковки, где-то паллеты... Хотя половинки мест..? С другой стороны, я когда-то участвовал в автоматизации оптовой торговли пивом, там народ перепаковывал упаковки 6 бутылок на 2 сорта, чтобы только поддерживать ассортимент точек, в которых продается только самое дешевое... А в правилах хорошего стиля программирования есть и такое: "не делать лишних предположений". И, насколько я понял про общий модуль, коллега утверждал, что в общих модулях много полезных функций и процитировал оттуда решение задачи в более общей постановке. Отчего он цитировал именно ЗУП? Возможно, он сейчас интенсивно с ней работает. Все-таки, ставил вопрос и писал ответ разные люди. И связывать "места" вопроса с "ЗУП" ответа для получения каких-то выводов о контексте исходной задачи не очень корректно, мне кажется.
18. VmvLer 12.09.19 09:35 Сейчас в теме
(16) неважно откуда метод - из ЗУП, ПУП... я оставил идентификацию(имя общего модуля) только для того
чтобы пытливый ум понял откуда эта идея. а ваши рассуждения о местах порожняк какой-то

какая разница откуда идея если она применима на практике в других задачах?
17. VmvLer 12.09.19 09:19 Сейчас в теме
(12) Кэп, не смешите

с утра повеселили адепты "вечного сияния чистого разума"

общие модули я не просто так читаю а "ворую" оттуда неплохие идеи в закоулки своей памяти.
дело в том, что над этими модулями трудятся сотни, надеюсь светлых голов, и будет архиглупо
не воспользоваться лучшими плодами этих трудов.

вероятно, многие вещи я могу написать сам, вероятно некоторые даже круче, но будет еще глупее
ставать в позу и арать я крутой, я написал нетленку круче чем у разрабов - это ребячество.

главное идеи, повторюсь, и не важно написал ты их сам или украл.
И чем больше идей у тебя в голове, тем проще тебе будет создать новую.
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день