|
|
|
Функция округления в большую сторону | ☑ | ||
|---|---|---|---|---|
|
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); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции // ОкруглитьЦену() |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |