Имя: Пароль:
1C
 
Функция округления в большую сторону
0 aleks100
 
29.01.10
04:53
Если в 8.1 функция  округления в большую сторону?
1 aleks100
 
29.01.10
04:54
Т.е. в 8.0.Если нету.Может есть типовой алгоритм ?
2 Rusty Nail
 
29.01.10
05:03
Встроенные функции языка
Окр (Round)
Синтаксис:
Окр(<Число>, <Разрядность>, <Режим округления>)
Параметры:
<Число> (обязательный)
Тип: Число. Исходное число.
<Разрядность> (необязательный)
Тип: Число. Определяет число знаков дробной части, до которых производится округление. Если параметр отрицательный, то число округляется до соответствующего разряда в целой части, начиная с младших разрядов.
Параметр обязательный, если указан параметр <Режим округления>.
Значение по умолчанию: 0
<Режим округления> (необязательный)
Тип: РежимОкругления. Определяет режим округления. Помимо системного перечисления допускается использование числового параметра: 0 - если при округлении 1.5 = 1; 1 - если при округлении 1.5 = 2.
Значение по умолчанию: Окр15как20
Возвращаемое значение:
Тип: Число. Число, полученное в результате округления.
Описание:
Округляет исходное число до нужной разрядности в соответствии с заданным режимом округления.
Пример:
// Округлим цену до сотен рублей
ОкругленнаяЦена = Окр(Цена, -2);

// Округлим цену до копеек
ОкругленнаяЦена = Окр(Цена, 2);
3 aleks100
 
29.01.10
05:06
бух говорит такая функция не подойдет ей нужно чтобы 1.1 округляло до 2.
Даже 1.01 округляло до 2
4 aleks100
 
29.01.10
05:27
окр(цена+0.49,0)
5 Ursus maritimus
 
29.01.10
05:48
И в чем проблема? Напиши.
6 aleks100
 
29.01.10
10:43
округлить ввехр  до первого целого
в эксели есть такая функция =ОКРВВЕРХ(Число;1),а в 1с нету вот пришлось немного
извращаться
7 Ненавижу 1С
 
гуру
29.01.10
10:47
Если Ч=Цел(Ч) Тогда
 Возврат Ч;
Иначе
 Возврат Ч+1;
КонецЕсли;
8 Живой Ископаемый
 
29.01.10
11:11
2(4) Почему 0.49? нужно прибавлять 0.5
Например у тебя 1.01, которое должно быть округлено до 2-ки - прибавив 0.5, ты получишь 1.51, что будет округлено как тебе нужно...
Обратноже, если у тебя 1.99, и его тоже нужно округлить до 2-ки - прибавив 0.5, ты получишь 2.49, что при округлении даст ту же двойку...
9 73
 
29.01.10
11:16
(8) А если исходное = 1 ?

Имхо, (7) с поправкой, лучше:
Если Ч=Цел(Ч) Тогда
 Возврат Ч;
Иначе
 Возврат Цел(Ч)+1;
КонецЕсли;

Или
= ?(Ч=Цел(Ч), Ч, Цел(Ч)+1);
10 aleks100
 
29.01.10
11:29
понятно.Пожалую сделаю  как посоветовали в (9).Так нагляднее
11 Живой Ископаемый
 
29.01.10
11:32
хм.. да, точно, 1-ницу не учел.. :(
12 Megas
 
29.01.10
11:40
У нас так (Писано до меня)

СтрокаТаблицаЦен.цена1 = Ценообразование.ОкруглитьЦену(СтрокаТаблицаЦен.цена1, Перечисления.ПорядкиОкругления.Окр10, Истина);

Функция ОкруглитьЦену(Число, ПараметрПорядокОкругления, ОкруглятьВБольшуюСторону) Экспорт

   Перем Результат;

   // Преобразуем порядок округления числа.
   // Если передали пустое значение порядка, то округлим до копеек.
   Если НЕ ЗначениеЗаполнено(ПараметрПорядокОкругления) Тогда
       ПорядокОкругления = Перечисления.ПорядкиОкругления.Окр0_01;
   Иначе
       ПорядокОкругления = ПараметрПорядокОкругления;
   КонецЕсли;

   Порядок = Число(Строка(ПорядокОкругления));
       
   // вычислим количество интервалов, входящих в число
   КоличествоИнтервал    = Число / Порядок;
       
   // вычислим целое количество интервалов.
   КоличествоЦелыхИнтервалов = Цел(КоличествоИнтервал);
       
   Если КоличествоИнтервал = КоличествоЦелыхИнтервалов Тогда
       
       // Числа поделились нацело. Округлять не нужно.
       Результат    = Число;
   Иначе
       Если ОкруглятьВБольшуюСторону Тогда
           
           // При порядке округления "0.05" 0.371 должно округлитья до 0.4
           Результат = Порядок * (КоличествоЦелыхИнтервалов + 1);
       Иначе

           // При порядке округления "0.05" 0.371 должно округлитья до 0.35,
           // а 0.376 до 0.4
           Результат = Порядок * Окр(КоличествоИнтервал,0,РежимОкругления.Окр15как20);
       КонецЕсли;
   КонецЕсли;
   
   Возврат Результат;
   
КонецФункции // ОкруглитьЦену()