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