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

Округление числа с одним знаком после запятой

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

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

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