|
Формула округления до целых чисел, кратных нужному | ☑ | ||
---|---|---|---|---|
0
Aswed
13.03.17
✎
18:04
|
К концу дня что то ни как не могу придумать универсальный механизм который бы делал округление до целого числа кратного нужному.
например что бы сумма 183 была округленна до числа кратному 5. Т.е. до 185. Соответственно 192 до 195 197 до 200 и т.д. Подскажите формулу. |
|||
1
Волшебник
модератор
13.03.17
✎
18:05
|
192 округляется до 190
|
|||
2
Fragster
гуру
13.03.17
✎
18:06
|
поделить, округлить, умножить
|
|||
3
Fragster
гуру
13.03.17
✎
18:07
|
ну и (1) + 1
|
|||
4
Aswed
13.03.17
✎
18:07
|
(1) Это в нормальных случаях))) Тут только плюс фирме)))
|
|||
5
Волшебник
модератор
13.03.17
✎
18:07
|
(4) Тогда это не округление, а мошенничество.
|
|||
6
Aswed
13.03.17
✎
18:08
|
(2) Точно!
Спасибо! |
|||
7
Fragster
гуру
13.03.17
✎
18:08
|
если надо вверх - то на этапе "округлить" надо округлять вверх, что множество раз было рассмотрено на форуме, в простейшем случае +0.5 и параметр "округлять 1.5 как 1"
|
|||
8
Волшебник
модератор
13.03.17
✎
18:08
|
Тогда так:
ОкруглённаяСуммаВПользуФирмы = Окр(Сумма / 5 + 0.5) * 5 |
|||
9
Fragster
гуру
13.03.17
✎
18:09
|
(8)Окр(Сумма / 5 + 0.5, , 0)
|
|||
10
Aswed
13.03.17
✎
18:10
|
(8) Спасибо!!!
То что надо! |
|||
11
Fragster
гуру
13.03.17
✎
18:10
|
(10) в (8) еще и 190 до 195 ;)
|
|||
12
Волшебник
модератор
13.03.17
✎
18:11
|
||||
13
Aswed
13.03.17
✎
18:15
|
(11) Я проверяю вначале. Если сумма кратная то округлять не надо.
|
|||
14
azernot
13.03.17
✎
18:44
|
Функция ОкруглитьДО(ИсходноеЧисло, РазрядОкругления = 1, РежимОкругления = 1);
ОстатокОтДеления = ИсходноеЧисло % РазрядОкругления; Если РежимОкругления = 1 Тогда //Обычный по мат. правилам Результат = ИсходноеЧисло - ?(ОстатокОТДеления>=(РазрядОкругления/2), -РазрядОкругления + ОстатокОТДеления, ОстатокОТДеления); ИначеЕсли РежимОкругления = 2 Тогда //Обычный по мат. правилам, 0.5 округляется в меньшую сторону Результат = ИсходноеЧисло - ?(ОстатокОТДеления>(РазрядОкругления/2), -РазрядОкругления + ОстатокОТДеления, ОстатокОТДеления); ИначеЕсли РежимОкругления = 3 Тогда //В меньшую сторону Результат = ИсходноеЧисло - ОстатокОтДеления; ИначеЕсли РежимОкругления = 4 Тогда //В большую сторону Результат = ИсходноеЧисло - ОстатокОтДеления + РазрядОкругления; КонецЕсли; Возврат Результат; КонецФункции Вызываем ОкруглитьДО(183, 5, 4); Получаем округление до 5 в большую сторону, т.е. до 185 |
|||
15
Aswed
13.03.17
✎
18:47
|
(14) Вот спасибо!!!!
|
|||
16
Fragster
гуру
13.03.17
✎
18:54
|
(14) проверял? а почему оно 190 до 195 округляет?
|
|||
17
Fragster
гуру
13.03.17
✎
18:54
|
(16)+ в режиме "в большую сторону"
|
|||
18
Fragster
гуру
13.03.17
✎
18:55
|
вот для таких случаев юнит тесты пригождаются
|
|||
19
azernot
14.03.17
✎
10:37
|
(18) Согласен.
Функция ОкруглитьДО(ИсходноеЧисло, РазрядОкругления = 0.5, РежимОкругления = 3); ОстатокОтДеления = ИсходноеЧисло % РазрядОкругления; Если ОстатокОтДеления = 0 Тогда Возврат ИсходноеЧисло; КонецЕсли; Если РежимОкругления = 1 Тогда //Обычный по мат. правилам Результат = ИсходноеЧисло - ?(ОстатокОТДеления>=(РазрядОкругления/2), -РазрядОкругления + ОстатокОТДеления, ОстатокОТДеления); ИначеЕсли РежимОкругления = 2 Тогда //Обычный по мат. правилам, 0.5 округляется в меньшую сторону Результат = ИсходноеЧисло - ?(ОстатокОТДеления>(РазрядОкругления/2), -РазрядОкругления + ОстатокОТДеления, ОстатокОТДеления); ИначеЕсли РежимОкругления = 3 Тогда //В меньшую сторону Результат = ИсходноеЧисло - ОстатокОтДеления; ИначеЕсли РежимОкругления = 4 Тогда //В большую сторону Результат = ИсходноеЧисло - ОстатокОтДеления + РазрядОкругления; КонецЕсли; Возврат Результат; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |