Имя: Пароль:
1C
1С v8
Округление числа с одним знаком после запятой
0 Snail
 
01.07.20
11:02
Всем привет!
Как сделать округление такого вида: есть реквизит (число) с двумя знаками после запятой, нужно чтобы округлялось 10,56 в 11,00, а 10,40 в 10,50
1 fisher
 
01.07.20
11:07
Либо точнее правила округления сформулируй, либо дай больше разных примеров, если туго с формулировками. Округлять в большую сторону с шагом 0.5, что ли?
2 Snail
 
01.07.20
11:09
Нужно чтобы было так: если 10,01 тогда 10,50 или 10,51 в 11,00 на выходе должно быть только два варианта 0,50 и 1,00
3 fisher
 
01.07.20
11:13
Кратность = 0.5;
Результат = Цел(Окр(Сумма / Кратность, 0)) * Кратность
4 Shandor777
 
01.07.20
11:13
(0) Не останавливаясь на странности "округления", обращу внимание, что второй знак после запятой вводит в заблуждение, указывая предполагаемую точность до второго знака.
5 fisher
 
01.07.20
11:14
А, нет, стоп. Тебе ж 10,01 вверх надо.
6 Snail
 
01.07.20
11:16
Да, сейчас 10,51 это 10,50
7 fisher
 
01.07.20
11:16
Тогда, наверное, так:
Цел(Окр(Сумма + 0.499 / 0.5, 0)) * 0.5
8 Snail
 
01.07.20
11:18
Сейчас 10,51 это 6,00  :(
9 fisher
 
01.07.20
11:19
А так :)
Цел(Сумма + 0.499 / 0.5, 0) * 0.5
10 fisher
 
01.07.20
11:19
Цел(Окр((Сумма + 0.499) / 0.5, 0)) * 0.5
11 Ненавижу 1С
 
гуру
01.07.20
11:20
Кратность = 0.5;
Результат = (Цел(Сумма/Кратность)+?(Сумма%Кратность>0,1,0)) * Кратность
12 fisher
 
01.07.20
11:20
Тьфу
Цел((Сумма + 0.499) / 0.5, 0) * 0.5
13 Shandor777
 
01.07.20
11:22
А что, создать функцию, в которой выделить дробную часть, и использовать Если-Иначе-КонецЕсли некомильфо?
Думаете будет медленнее работать, чем куча делений-умножений?
14 Snail
 
01.07.20
11:25
fisher,

Цел((Сумма + 0.499) / 0.5, 0) * 0.5 вылетает ошибка (
15 fisher
 
01.07.20
11:26
(14) Описка.
Цел((Сумма + 0.499) / 0.5) * 0.5
16 Snail
 
01.07.20
11:26
Цел((Сумма + 0.499)) / 0.5<<?>>, 0) * 0.5;
17 Snail
 
01.07.20
11:27
ОГРОМНОЕ спасибище !!! То, что надо ))
18 fisher
 
01.07.20
11:28
В (11) фактически тот же вариант, только более универсальный.
19 Злопчинский
 
01.07.20
13:18
//******************************************************************************
// глОкруглить(Числ, ПорядокОкругления)
//
// Параметры:
//  Числ              - исходное число
//  ПорядокОкругления - элемент перечисления Порядки окгугления:
//  "шаг" округления (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);
        КонецЕсли;
        
    КонецЕсли;
    
    Возврат Рез;
КонецФункции // глОкруглить()
20 pechkin
 
01.07.20
13:20
лучше через если писать. чем 0.4999 прибавлять