0
- 11.06.2014 - 11:04
|
Задача такая, надо округлить суммы выплат до 50 руб. в сторону увеличения. Т.е. чтобы, например, сумма 22801 стала 22850, или 16549 -> 16550. Никак не пойму, каким алгоритмом можно повторить функцию Excel ОКРВВЕРХ(). Есть какие-нибудь идеи? | |
1
- 11.06.2014 - 11:10
|
Понял как: ЗарплатаО = Цел(Зарплата/50)+50; | |
2
- 11.06.2014 - 11:59
|
Фунукция ОкруглитьВверхДо50руб(Зарплата) ЗарплатаО = Окр(Зарплата,-2,1); Возврат ЗарплатаО+?(Зарплата>ЗарплатаО,50,0); КонецФункции | |
3
- 11.06.2014 - 12:13
|
(1) Для 22801 результат будет 506. Если уж идти этим путем, то надо так: ЗарплатаО = Цел(Зарплата/50)*50+50; (2) Это уж совсем по-1Совски... А по-математическому: ЗарплатаО = Окр(Зарплата*2+49,-2,1)/2; | |
4
- 11.06.2014 - 12:27
|
(3) думать лень)) просто посыл к тому, что (1) не туда) долго в табло тренировался?)) | |
5
- 11.06.2014 - 12:49
| (4) Долго. Но не в табло. И вообще не в 1С. Когла-то давно пришлось решать задачу расчета сбора за почтовый перевод фиксированым процентом "с полного и неполного рубля". Вот с тех пор и запомнился прием с Окр(...+0.49) | |
6
- 11.06.2014 - 12:52
|
0-US1C > Стыдно не знать и не читать классику. Про полтинники. Я уже писал, как в компании, продававшей периодическую печать, киоскеры, работавшие в метро, взмолились, чтобы мы округляли розничные цены на газеты до полтинника. Руководство нас на это благословило, и я программисту ровно так задание и сформулировал: «В поле PriceMetro поместить значение из поля PriceRetail, округленное до 0,5». Звонит программист: – А каким способом округлять? – Обычным. – Андрей, я не знаю обычного способа округлять до 0,5. Пожалуйста, опиши. – Ты издеваешься? – Нет, я серьезно. – Хорошо. Я в раздражении швыряю трубку, открываю текст задания и… задумываюсь. На всякий случай лезу в Интернет, потом благодарю Бога, что у меня есть умный и спокойный программист, и записываю в задании: ДРОБН:= А – ЦЕЛОЕ (А) ЕСЛИ ДРОБН < 0,25 ТО ДРОБН:= 0 ИНАЧЕ ЕСЛИ ДРОБН < 0,75 ТО ДРОБН:= 0,5 ИНАЧЕ ДРОБН:= 1 ОКРУГЛ05 (А) = ДРОБН + ЦЕЛОЕ (А) Дело в том, что не существует никакого «общего» способа округления до полтинников. Его нужно было записать в задании явно. Что я и сделал самым понятным для программиста способом. http://www.e-reading.ws/bookreader.p...spoved%27.html | |
7
- 11.06.2014 - 13:40
|
эх, молодёжь... [кряхтя] не гоняли вас на упрощение алгоритмов... проще всего работать с удвоенным числом, а результат разделить пополам: =ОКРУГЛВВЕРХ(A1*2;-2)/2 | |
8
- 11.06.2014 - 14:05
| (7) А в какой версии 1С есть функция ОКРУГЛВВЕРХ()? | |
9
- 11.06.2014 - 14:10
| (8) есть Цел +1 :) | |
10
- 11.06.2014 - 14:45
| 9-Гена > Цел(50*2;-2)+1 = 101 :) | |
11
- 11.06.2014 - 20:27
|
Как говорил Фиксин "..мой гений дарит вам..." . //************************************************** **************************** // глОкруглить(Числ, ПорядокОкругления) // // Параметры: // Числ - исходное число // ПорядокОкругления - элемент перечисления Порядки окгугления: // "шаг" округления (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); КонецЕсли; КонецЕсли; Возврат Рез; КонецФункции // глОкруглить() | |
| Интернет-форум Краснодарского края и Краснодара |