Имя: Пароль:
1C
1С v8
1С 8.3 Как округлить в большую сторону до тысячи
Ø (Волшебник 16.10.2019 16:43)
0 100kg
 
16.10.19
11:15
Надо любое число округлить в большую сторону до 1000
Например: 236->1000, 1236->2000
Как это сделать элегантно?
1 Волшебник
 
16.10.19
11:15
Окр(ч+500)
2 НиколаевГ
 
16.10.19
11:16
(0) Запросом ещё, небось?
3 100kg
 
16.10.19
11:17
(1) Спасибо
4 100kg
 
16.10.19
11:17
(2) нет
5 100kg
 
16.10.19
11:19
(1) Так наверное работать не будет
236+500->736
Мне же не до целого, а до 1000 надо
6 ДенисЧ
 
16.10.19
11:19
(5) Окр( , -3)
7 100kg
 
16.10.19
11:28
(6) Точно, спасибо
8 hhhh
 
16.10.19
11:31
(7) да, и не 500 надо, а

Окр(ч+499.9999, -3)
9 olegves
 
16.10.19
11:41
(8) можно и 500
10 hhhh
 
16.10.19
11:57
(9) тогда фигня получится, она 1000 округлит до 2000
11 Ёпрст
 
гуру
16.10.19
12:02
(0) во всех типовых 7.7 было следующее:


//******************************************************************************
// глОкруглить(Числ, ПорядокОкругления)
//
// Параметры:
//  Числ              - исходное число
//  ПорядокОкругления - элемент перечисления Порядки окгугления:
//  "шаг" округления (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);
        КонецЕсли;
        
    КонецЕсли;
    
    Возврат Рез;
КонецФункции // глОкруглить()


в снеговике тоже есть падобные функции в общих модулях, ищи
12 Ёпрст
 
гуру
16.10.19
12:04
Например, такая :


Функция ОкруглитьВБольшуюСторону(Значение, Разрядность) Экспорт
    
    Множитель = Цел(Pow(10, Разрядность));
    
    // Если передано неверное (нецелое или < 0) значение разрядности, возвращается 0
    Если Множитель < 1 Тогда
        
        Возврат 0;
        
    КонецЕсли;
    
    Возврат (Цел(Значение * Множитель) + ?(Значение * Множитель - Цел(Значение * Множитель) > 0, 1, 0)) / Множитель;
    
КонецФункции // ОкруглитьВБольшуюСторону()
13 Ёпрст
 
гуру
16.10.19
12:07
Или так:


// Округляет число по заданному порядку. Если задано (=Истина) "ОкруглятьВБольшуюСторону",
// то число 123.37 при порядке округление 0.5 превратиться в 123.50, а число 0.1
// при порядке округления 5 станет равным 5.
//
// Параметры:
//  Число                    - исходное число
//  ПорядокОкругления        - элемент перечисления Порядки окгугления:
//                             "шаг" округления (0.01 (арифметическое), 0.01, 0.05, 0.1, 0.5, 1, 5, 10, 50, 100)
//  ОкруглятьВБольшуюСторону - булево, определяет способ округления: если Истина,
//                             то при порядке округления "5" 0.01 будет округлена до 5,
//                             Ложь - округление по арифметическим правилам
//
// Возвращаемое значение:
//  Округленное по заданному порядку значение
//
Функция ОкруглитьЦену(Число, ПараметрПорядокОкругления, ОкруглятьВБольшуюСторону) Экспорт

    Перем Результат;

    Если НЕ ЗначениеЗаполнено(Число) Тогда
        Возврат 0;
    КонецЕсли;
    
    // Преобразуем порядок округления числа.
    // Если передали пустое значение порядка, то округлим до копеек.
    Если НЕ ЗначениеЗаполнено(ПараметрПорядокОкругления) Тогда
        ПорядокОкругления = Перечисления.ПорядкиОкругления.Окр0_01;
    Иначе
        ПорядокОкругления = ПараметрПорядокОкругления;
    КонецЕсли;

    Порядок = Число(Строка(ПорядокОкругления));
        
    // вычислим количество интервалов, входящих в число
    КоличествоИнтервал    = Число / Порядок;
        
    // вычислим целое количество интервалов.
    КоличествоЦелыхИнтервалов = Цел(КоличествоИнтервал);
        
    Если КоличествоИнтервал = КоличествоЦелыхИнтервалов Тогда
        
        // Числа поделились нацело. Округлять не нужно.
        Результат    = Число;
    Иначе
        Если ОкруглятьВБольшуюСторону Тогда
            
            // При порядке округления "0.05" 0.371 должно округлитья до 0.4
            Результат = Порядок * (КоличествоЦелыхИнтервалов + 1);
        Иначе

            // При порядке округления "0.05" 0.371 должно округлитья до 0.35,
            // а 0.376 до 0.4
            Результат = Порядок * Окр(КоличествоИнтервал,0,РежимОкругления.Окр15как20);
        КонецЕсли;
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции // ОкруглитьЦену()
14 novichok79
 
16.10.19
12:15
п***ц, поделить на 10 в нужной разрядности, сделать окр в большую сторону, результат умножить на 10 в нужной разрядности
15 hhhh
 
16.10.19
12:18
(14) зачем делить?
16 novichok79
 
16.10.19
12:19
потому что окр работает с дробями, разве нет?
17 hhhh
 
16.10.19
12:22
(16) приколист ты.
18 hhhh
 
16.10.19
12:23
(16) читай (6) до полного просветления
19 novichok79
 
16.10.19
12:25
(18) ну ёпта, кто ж знал что так можно то?
20 catena
 
16.10.19
12:48
(19)Синтаксис-помощник?
21 novichok79
 
16.10.19
15:27
(20) мануал для лохов же, экстрим кодирование для нормальных пацанов.
22 palsergeich
 
16.10.19
15:44
(21) Экстремальное программирование это не про метание говнокодика, если что.
23 palsergeich
 
16.10.19
15:47
24 novichok79
 
16.10.19
16:41
(23) меня удивляет, что за незнание не часто используемой фичи функции "Окр", клоун из (17) практически окрестил меня говнокодером. но, чему удивляться, это интернет, и тут посылают найух.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший