Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

1С 8.3 Как округлить в большую сторону до тысячи

Ø [Волшебник, 16.10.19 - 16:43]
1С 8.3 Как округлить в большую сторону до тысячи
Я
   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) Запросом ещё, небось?
   100kg
 
3 - 16.10.19 - 11:17
(1) Спасибо
   100kg
 
4 - 16.10.19 - 11:17
(2) нет
   100kg
 
5 - 16.10.19 - 11:19
(1) Так наверное работать не будет
236+500->736
Мне же не до целого, а до 1000 надо
   ДенисЧ
 
6 - 16.10.19 - 11:19
(5) Окр( , -3)
   100kg
 
7 - 16.10.19 - 11:28
(6) Точно, спасибо
   hhhh
 
8 - 16.10.19 - 11:31
(7) да, и не 500 надо, а 

Окр(ч+499.9999, -3)
   olegves
 
9 - 16.10.19 - 11:41
(8) можно и 500
   hhhh
 
10 - 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);
        КонецЕсли; 
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции// ОкруглитьЦену()

   novichok79
 
14 - 16.10.19 - 12:15
п***ц, поделить на 10 в нужной разрядности, сделать окр в большую сторону, результат умножить на 10 в нужной разрядности
   hhhh
 
15 - 16.10.19 - 12:18
(14) зачем делить?
   novichok79
 
16 - 16.10.19 - 12:19
потому что окр работает с дробями, разве нет?
   hhhh
 
17 - 16.10.19 - 12:22
(16) приколист ты.
   hhhh
 
18 - 16.10.19 - 12:23
(16) читай (6) до полного просветления
   novichok79
 
19 - 16.10.19 - 12:25
(18) ну ёпта, кто ж знал что так можно то?
   catena
 
20 - 16.10.19 - 12:48
(19)Синтаксис-помощник?
   novichok79
 
21 - 16.10.19 - 15:27
(20) мануал для лохов же, экстрим кодирование для нормальных пацанов.
   palsergeich
 
22 - 16.10.19 - 15:44
(21) Экстремальное программирование это не про метание говнокодика, если что.
   palsergeich
 
23 - 16.10.19 - 15:47
   novichok79
 
24 - 16.10.19 - 16:41
(23) меня удивляет, что за незнание не часто используемой фичи функции "Окр", клоун из (17) практически окрестил меня говнокодером. но, чему удивляться, это интернет, и тут посылают найух.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.