Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Помогите написать внешнюю обработку округления на 1С 8.3

Помогите написать внешнюю обработку округления на 1С 8.3
Я
   Inshi
 
11.10.18 - 21:15
Помогите написать алгоритм округления (внешняя обработка).

Задача: Вводится число, которое нужно округлить (пример: 250.35941). Вводится число на сколько цифер после запятой остается(пример: Цифры после запятой - 2; Результат - 250.35).

Примечание: я уже реализовал используя тип: Строка; но мне нужно реализовать используя тип: Число. Прошу помочь мне. Я начинающий разработчик. ВСТРОЕННУЮ ФУНКЦИЮ ОКР() Я ИСПОЛЬЗОВАЛ, НО МНЕ ОНА НЕ ДАЕТ НУЖНОГО РЕЗУЛЬТАТА.
 
 
   Amra
 
1 - 11.10.18 - 21:18
То есть требуется не округление, а просто оставить энное количество знаков после запятой? И да, не капси тут
   Inshi
 
3 - 11.10.18 - 21:23
(1) Amra, прошу прощения. Нет, требуется округлить число. Я просто немного не понимаю, через что мне лучше всего сделать. Через Дроб()?
   Amra
 
6 - 11.10.18 - 21:26
(3) Определись что надо. Округление 250.35941 по правилам математики дает 250.36, а не 250.35. И показывай, как использовал Окр(), что она не дала правильно регультата
   Inshi
 
7 - 11.10.18 - 21:31
(6) Она выполняет все казалось бы нормально, но вот только у меня есть еще неких 3 режима( "Вверх" - число постоянно округляется в большую сторону, если X > 0; "Нет" - Просто выполняется округление, по правилам математики; "Вниз" - выполняет все тоже самое, что и "Нет") все это выбирается через СписокЗначений. У меня уже есть вариант в котором я выполнил это все, но там работа идет с преобразованием числа в строку и после все манипуляций переводиться снова в число и выводиться.
   Inshi
 
8 - 11.10.18 - 21:33
(6)Я знаю как работает встроенная функция Окр(Округляемое число,Округление До,Режим округления(0,1))
   Dен
 
9 - 11.10.18 - 21:36
> У меня с математикой совсем все туго
Это осилишь?
https://ru.wikipedia.org/wiki/Округление
   Inshi
 
10 - 11.10.18 - 21:49
(9)Я все понимаю... Но я не на столько тупой. Раз я пишу сюда, так может это значит, что у меня проблемы конкретно с реализацией этого в 1С...
 
 Рекламное место пустует
   МимохожийОднако
 
11 - 11.10.18 - 21:51
Используй Формат(ТвоёЧисло,"ЧДЦ=2")
   Злопчинский
 
12 - 11.10.18 - 21:55
в формат надо ввести новую форматную строку - ПДЦ
   bolder
 
13 - 11.10.18 - 21:55
(10) То что ты просишь не есть округление , это отсечение.
Цел(x*100)/100;
   МимохожийОднако
 
14 - 11.10.18 - 21:57
(12) Согласен
   probably
 
15 - 11.10.18 - 22:04
(10) без обид, приводи ка как задача решена тобой на паскале (или какой язык ты знаешь) и получишь ответ как сделать в 1с
   Inshi
 
16 - 11.10.18 - 22:25
<pre>
перем СписВыб;

Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Вставить содержимое обработчика.

КонецПроцедуры

Процедура ОкруглитьНажатие(Элемент)
    Если ОкруглитьДо >= 5 Тогд//Условие при котором мы устранили ошибку

        РезультатОкр = ОкрЧисло;
        Возврат;
    КонецЕсли;
    ОЧ = Строка(ОкрЧисло)//Преобразовали ОкрЧисло в строку из числа

    Позиция = Найти(ОЧ,",")//Находим запятую в числе

    ВременноеЗначение = Число(Лев(ОЧ,Позиция + ОкруглитьДо))//Оставляем определенное количество знаков после запятой. Преобразуем результат функции ЛЕВ() в число

    КонтрЧис = Число(Сред(ОЧ,Позиция + ОкруглитьДо + 1,1))//Нашел число при помощи которого буду производить округление

    //-----------------------------------------------------------------

    //Если РежимОкр = 2 Тогда

    //    если КонтрЧис >= 5 Тогда

    //        ВременноеЗначение = ВременноеЗначение + Прибавить;

    //    КонецЕсли;    

    //ИначеЕсли РежимОкр = 0 Тогда

    //    

    //ИначеЕсли РежимОкр = 1 Тогда

    //    если КонтрЧис >= 0 Тогда

    //        ВременноеЗначение = ВременноеЗначение + Прибавить;

    //    КонецЕсли;    

    //КонецЕсли;

    //-----------------------------------------------------------------

    Если РежимОкр = 2 И КонтрЧис >= 5 Или РежимОкр = 1 И КонтрЧис >= 0 Тогда
        Прибавить = 1;
        Для сч = 1 по ОкруглитьДо цикл
            Прибавить = Прибавить / 10;
        КонецЦикла;
        ВременноеЗначение = ВременноеЗначение + Прибавить;
    КонецЕсли;    
    //-----------------------------------------------------------------

    РезультатОкр = ВременноеЗначение;
    
КонецПроцедуры

Процедура ОкрЧислоПриИзменении(Элемент)
    РежимОкр = Перечисления.РежимыОкругления;
    СписВыб = Новый СписокЗначений;
    СписВыб.Добавить(1, "Вверх");
    СписВыб.Добавить(2 , "Нет" );
    СписВыб.Добавить(0, "Вниз" );
    ЭлементыФормы.РежимОкр.СписокВыбора = СписВыб;
    Режимокр = 2;
КонецПроцедуры

</pre>
   Inshi
 
17 - 11.10.18 - 22:26
(15) Представил код, в котором я решил данную задачу при помощи преобразования в строку
   Fram
 
18 - 12.10.18 - 02:07
(17) играйся с функцией ОКР(), а также с операциями умножения и деления пока не поймёшь как все это работает.
   Inshi
 
19 - 12.10.18 - 19:06
(18) (15) (13) (12) (11) (6)
Я нашел решение! Вернее я сам его и написал) 
перем СписВыб;

Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Вставить содержимое обработчика.

КонецПроцедуры

Процедура ОкруглитьНажатие(Элемент)
    Если ОкруглитьДо >= 5 Тогд//Условие при котором мы устранили ошибку

        РезультатОкр = ОкрЧисло;
        Возврат;
    КонецЕсли;
    
    Прибавить = 1;
    Для сч = 1 по ОкруглитьДо цикл
        Прибавить = Прибавить * 10;
    КонецЦикла;
    
    ВЗ = ОкрЧисло * Прибавить//вывожу часть с которой в последующем буду работать

    Цел1 = Цел(ВЗ)//Перевод числа в целый

    Тест = Цел1 / Прибавить//Возвращаю цифры после запятой

    
    ВЗ2 = ОкрЧисло * Прибавить * 10//

    Цел2 = Цел(ВЗ2)//

    
    КонтрЧис = Цел2 - (Цел1 * 10)//

    //-----------------------------------------------------------------

    Если РежимОкр = 2 И КонтрЧис >= 5 Или РежимОкр = 1 И КонтрЧис >= 0 Тогда
        Прибавить = 1;
        Для сч = 1 по ОкруглитьДо цикл
            Прибавить = Прибавить / 10;
        КонецЦикла;
        Тест = Тест + Прибавить;
    КонецЕсли;    
    //-----------------------------------------------------------------

    РезультатОкр = Тест;
    
КонецПроцедуры

Процедура ОкрЧислоПриИзменении(Элемент)
    РежимОкр = Перечисления.РежимыОкругления;
    СписВыб = Новый СписокЗначений;
    СписВыб.Добавить(1, "Вверх");
    СписВыб.Добавить(2 , "Нет" );
    СписВыб.Добавить(0, "Вниз" );
    ЭлементыФормы.РежимОкр.СписокВыбора = СписВыб;
    Режимокр = 2;
КонецПроцедуры
   МимохожийОднако
 
20 - 12.10.18 - 19:47
Слава тебе, Господи!

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