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

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) Кэп, не смешите

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

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

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

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот