Имя: Пароль:
1C
1С v8
Округлить число до ближайшего целого без условий можно?
0 palpetrovich
 
27.10.11
15:58
костыль типа:
Окр(Количество+0.5, 0, РежимОкругления.Окр15как20);
хромает в случае если Количество изначально целое число и его менять не надо
зы: не то что-бы мне трудно нарисовать уловие, протсо интересно, можно-ли обойтись без него?
1 Ненавижу 1С
 
гуру
27.10.11
15:59
"Округлить число до ближайшего целого" это просто Окр(Количество)
2 vmv
 
27.10.11
16:00
в типовых видел метод округлить кратно N, да и самому написать проблема что ли
3 palpetrovich
 
27.10.11
16:01
блин, я имею ввиду до ближайщего  БОЛЬШЕГО целого
4 Ненавижу 1С
 
гуру
27.10.11
16:02
(3) Окр15Как10 пробовал?
5 palpetrovich
 
27.10.11
16:02
вот к примеру, вроде как:  Цел(ДробноеЗначение)+1 решает проблемку, но только если число точно дробное
6 DrShad
 
27.10.11
16:03
(30) окр(Количество,0) +1
7 Рэйв
 
27.10.11
16:03
Округление до ближайшего большего целого:
А=А+1
8 palpetrovich
 
27.10.11
16:03
(4) зачем? ...ну или как, если знаешь?
9 acsent
 
27.10.11
16:04
Окр(Число+0.5, 0)
10 Ненавижу 1С
 
гуру
27.10.11
16:04
(8) вот так:

Окр(Количество+0.5, 0, РежимОкругления.Окр15как10);
11 palpetrovich
 
27.10.11
16:04
(6) т.е.  окр(Количество,0, Окр15Как10) +1
12 acsent
 
27.10.11
16:04
Окр(Число+0.49999, 0)
13 acsent
 
27.10.11
16:05
(12) девяток можно добавить по количеству значащих цифр в параметре
14 palpetrovich
 
27.10.11
16:06
(10) ага, кажись покатит
(12) да ну :)
15 ado
 
27.10.11
16:07
(5)

?(Цел(ДробноеЗначение) = ДробноеЗначение, ДробноеЗначение, Цел(ДробноеЗначение)+1)


Оно?
16 Ненавижу 1С
 
гуру
27.10.11
16:08
(15) зачем? когда есть (10)
17 Fragster
 
гуру
27.10.11
16:09
т.е. 3-й параметр автору ни на что не намекнул?
все-таки не умеют 95% 1сников мозгом пользоваться...
18 palpetrovich
 
27.10.11
16:09
(5) не, это-ж условие, (10) - рулИт :)
всем спасибо
19 palpetrovich
 
27.10.11
16:09
(17) а некоторые любят делать быстрые вывады :)
20 palpetrovich
 
27.10.11
16:10
* вывады = выводы
21 palpetrovich
 
27.10.11
16:26
забавно, замер производительности:
Количество = Окр(Количество+0.5, 0, РежимОкругления.Окр15как10); // - 0,000074
Количество = ?(Цел(Количество) = Количество, Количество, Цел(Количество) + 1); //- 0,000070
22 Ненавижу 1С
 
гуру
27.10.11
16:34
ну все, это прорыв
замер производил надеюсь на 1000000 итераций?
23 aka AMIGO
 
27.10.11
16:40
Число%1+1
24 aka AMIGO
 
27.10.11
16:41
+23 вру!!..
отбой!!! ;))
25 palpetrovich
 
27.10.11
16:42
(22) :)
26 Reset
 
27.10.11
16:43
во как у меня

ИсхКоличество=1.65;
Для i=0 по 10000000 цикл Количество = Окр(ИсхКоличество+0.5, 0, РежимОкругления.Окр15как10); КонецЦикла;
Для i=0 по 10000000 цикл Количество = ?(Цел(ИсхКоличество) = ИсхКоличество, ИсхКоличество, Цел(ИсхКоличество) + 1); КонецЦикла;

Первая строка 13,599758 сек
Вторая 9,994055
27 Fragster
 
гуру
27.10.11
16:44
(12) а так еще быстрее:

ЦК = Цел(Количество); Количество = ?(ЦК = Количество, Количество, ЦК + 1);

Но в любом случае эта экономия не стоит того. Да и проверять (21) надо бы на 10000 итераций
28 Fragster
 
гуру
27.10.11
16:44
(26) обе строки в 1 цикл запихай, чтобы флуктуации меньше влияли
29 Reset
 
27.10.11
16:45
(27) 9,607401
Рекорд :)
30 Fragster
 
гуру
27.10.11
16:47
(29) еще быстрее должно быть ?(ЦК <> Количество, ЦК + 1, Количество); но тут я уже не уверен
31 Fragster
 
гуру
27.10.11
17:09
Количество = Окр(ИсхКоличество+0.5, 0, РежимОкругления.Окр15как10); 2,836583
Количество = ?(Цел(ИсхКоличество) = ИсхКоличество, ИсхКоличество, Цел(ИсхКоличество) + 1); 2,065987
ЦК = Цел(ИсхКоличество); Количество = ?(ЦК = ИсхКоличество, ИсхКоличество, ЦК + 1); 1,703989
ЦК = Цел(ИсхКоличество); Количество = ?(ЦК <> ИсхКоличество, ЦК + 1, ИсхКоличество); 1,603781
32 palpetrovich
 
27.10.11
17:16
(31) круто :)
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший