| 
    
        
     
     | 
    
  | 
Формула округления до целых чисел, кратных нужному | ☑ | ||
|---|---|---|---|---|
| 
    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 Тогда //В большую сторону Результат = ИсходноеЧисло - ОстатокОтДеления + РазрядОкругления; КонецЕсли; Возврат Результат; КонецФункции  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |