Версия для печати темы (https://pro1c.org.ua/index.php?s=fb0f2ccff77ce90a4cb75b01667c6bb4&showtopic=67146)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Обережно ОКР(371.8749999,2)

Автор: awp 22.12.22, 11:32

Доброго дня.

Столкнувся з проблеммою при округлені числа 371.8749999.
Функція ОКР видає 371.87, а потрібно 371.88

Я так розумію що при округленні до 2 воно відсікає все після сотих і починає округлювати.

Може хто сталкувався і підскаже як вирішити.....


awp @ Сегодня, 12:22 * ,
Сам спитав - сам відповів smile.gif

Може кому знадобиться (трофейне)

Функция ОкруглитьПоПравилам (Число, Разрядность) Экспорт
    нЧислоРазрядность             = Окр(Число, Разрядность,     РежимОкругления.Окр15как10);
    уЧислоРазрядность             = Окр(Число, Разрядность+1, РежимОкругления.Окр15как10);
    Остаток                     = ?(уЧислоРазрядность<нЧислоРазрядность, 0, Прав((уЧислоРазрядность-нЧислоРазрядность),1));
    ПредшествуетНечетноеЧисло    = Прав(нЧислоРазрядность,1)%2;
    Возврат ?((Число(Остаток)=5 И ПредшествуетНечетноеЧисло) ИЛИ Число>уЧислоРазрядность, Окр(уЧислоРазрядность,Разрядность,РежимОкругления.Окр15как20), нЧислоРазрядность);
КонецФункции

Автор: andreydv87 22.12.22, 12:10

awp @ Сегодня, 12:32 * ,
С чего Вы решили, что должно быть 371.88? Если вспомнить математику, то <0.5 округляется в меньшую сторону, а >0.5 в большую.

Автор: Petre 22.12.22, 12:32

awp @ Today, 11:32 * ,
Проблема у тому, що ви приймаєте це значення у періоді, а програма - ні. Програма взагалі не працює із нераціональними числами у періоді.
Запропонований варіант - не математичне заокруглення, а т.з. "фінансове". Воно придатне для окремих випадків.

Автор: awp 22.12.22, 16:47

andreydv87 @ Сегодня, 13:10 * ,
А якщо = 0.5 ?

Цитата(Petre @ 22.12.22, 13:32) *
Запропонований варіант - не математичне заокруглення, а т.з. "фінансове". Воно придатне для окремих випадків.


Так 1С начебто фінансова?

Справа в тому що рівняють по Excel - тому і граюся з різними функціями типу: ПЛТ ; ВСД ....

Автор: Petre 23.12.22, 9:06

awp @ Yesterday, 16:47 * ,
В екселі заокруглення 371,8749999 = 371,87. Це - загальноприйняте правило заокруглення.

Автор: andreydv87 23.12.22, 12:15

Цитата(awp @ 22.12.22, 17:47) *
А якщо = 0.5 ?

То вчіть математику за 5 клас!!!

awp @ Вчера, 17:47 * ,

А якщо цікаво і хочете зробити для себе, то подивіться в конфігурації "Роздрібна торгівля" або "Управліня торгівлею".
В цих конфігураціях у правилах ціноутворення є округлення в більшу сторону.
В видах цін (якщо не поміляюсь) є можливість вибору методу округленя (математичний або фінансовий).

Автор: awp 23.12.22, 20:50

Ок, учту все ваши пожелания и советы.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua