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

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Як можна провести округення суми з кратністю до 10 копійок?

Автор: kostya77 28.10.24, 13:25

Добрий день. підкажіть. як можна провести округення суми з кратністю до 10 копійок?

Автор: CobraS 28.10.24, 13:55

kostya77 @ Сегодня, 13:25 * ,
Мені б було навіть соромно таке запитувати.
Напр.: ОКР(Сумма,1)

Автор: kostya77 28.10.24, 14:02

CobraS @ Сегодня, 14:55 * ,
не правильно поставив запитання. Наприклад, якщо 0,42 то потрібно округлити до 0,5

Автор: CobraS 28.10.24, 14:27

kostya77 @ Сегодня, 14:02 * ,
ОКР(Сумма+0.09,1,1)

Автор: Sharzem 30.10.24, 17:30

kostya77 @ 28.10.24, 13:25 * ,
Можна й порозважатися:

Функция ОкруглитьЦены(прЦенаРозн,прСпособ)
    //прСпособ = Варианты: 5,10,25,50,1
    //прЦенаРозн = Число;
    
    лпЦенаРозн = прЦенаРозн;
    
    лпСпособ = прСпособ;
    лпКопейки=лпЦенаРозн-Цел(лпЦенаРозн);
    
    Если лпКопейки=0 Тогда
        Возврат лпЦенаРозн;
    КонецЕсли;
    
    лпДециКопейки=лпКопейки*10;
    лпДельта=лпДециКопейки-Цел(лпДециКопейки);
    ~Метка:
    Если лпСпособ = 5 Тогда
        Если лпДельта > 0.7 Тогда //округляем до десяти
        лпКопейки=(Цел(лпДециКопейки)+1)/10;
        ИначеЕсли лпДельта > 0.2 Тогда//округляем до пяти
            лпКопейки=(Цел(лпДециКопейки)+0.5)/10;
        Иначе
            лпКопейки=(Цел(лпДециКопейки))/10;
        КонецЕсли;
    ИначеЕсли лпСпособ = 10 Тогда
        лпКопейки=Окр(лпДециКопейки,0)/10;
    ИначеЕсли лпСпособ = 25 Тогда
        Если лпЦенаРозн < 1.75 Тогда
            лпСпособ = 5;//Нет смысла меньше 1,75
            Перейти ~Метка;
        КонецЕсли;
        Если лпКопейки > 0.85 Тогда
            лпКопейки = 1;
        ИначеЕсли лпКопейки > 0.60 Тогда
            лпКопейки = 0.75;
        ИначеЕсли лпКопейки > 0.35 Тогда
            лпКопейки = 0.50;
        ИначеЕсли лпКопейки > 0.10 Тогда
            лпКопейки = 0.25;
        Иначе
            лпКопейки = 0;
        КонецЕсли;
    ИначеЕсли лпСпособ = 50 Тогда
        Если лпДельта < 0.75 Тогда
            лпКопейки = 0.50;
        Иначе
            лпКопейки = 1;
        КонецЕсли;
    ИначеЕсли лпСпособ = 1 Тогда
        Если лпКопейки < 0.5 Тогда
            лпКопейки = 0;
        Иначе
            лпКопейки = 1;
        КонецЕсли;
    КонецЕсли;

    лпЦенаРозн=Цел(лпЦенаРозн)+лпКопейки;
    Возврат лпЦенаРозн;
КонецФункции // ОкруглитьЦены

Автор: Profi_1C77 31.10.24, 10:03

Sharzem @ Вчера, 17:30 * ,
Зачем такое - проще с умножением и на 100 к примеру , округление и сравнение с целочисленным делением, и тд.

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