Имя: Пароль:
1C
1С v8
Округление в запросе
,
0 Дукат
 
26.03.12
14:16
Есть необходимость сделать округление в запросе. Округление не простое - а чудное...

Смысл:

вот например есть
6400 - округляется до 6400
6440 - до 6500
6460 - до 6500
то есть до сотых в большую сторону.

Как такое реализовать?
1 andrewks
 
26.03.12
14:18
cast + "/" + "*"
2 andrewks
 
26.03.12
14:18
+ case
3 Дукат
 
26.03.12
14:19
при таком получишь в меньшую сторону: то есть 6400
4 Дукат
 
26.03.12
14:20
(2) хотя пример можешь привсти?
5 andrewks
 
26.03.12
14:20
+ "+"
6 Дукат
 
26.03.12
14:26
(5) на пальцах с указанными цифрами можешь показать?
7 Omskdizel
 
26.03.12
14:32

ВЫБОР КОГДА ВЫРАЗИТЬ(Зн/100 КАК ЧИСЛО(15,0))*100 = Зн ТОГДА
  Зн //Округлять не надо
ИНАЧЕ
  (ВЫРАЗИТЬ(Зн/100 КАК ЧИСЛО(15,0))+1)*100 // Округлили
КОНЕЦ


Как-то так наверное, но не проверял, консоли нет под рукой
8 s03
 
26.03.12
14:33
Окр((х+10)/100)*100
9 s03
 
26.03.12
14:34
ну и переделать под синтаксис языка запросов
10 Reset
 
26.03.12
14:34
Выбрать Выразить((Х+49)/100 как Число(10,0))*100

Не проверял :)
11 Дукат
 
26.03.12
14:34
(8) если х = 5310 - то будет при таком решении 5300 ( а надо 5400 = пробывал так уже. но проверю сейчас еще раз
12 Omskdizel
 
26.03.12
14:35
(10) Хех :)
13 Omskdizel
 
26.03.12
14:35
(11) Пробни (7)
14 andrewks
 
26.03.12
14:37
(6)


select
case when cast(&InputValue/100 as Number(10,0))*100=&InputValue then &InputValue
else cast((&InputValue/100+0.5) as Number(10,0))*100 end
as OutputValue
15 Дукат
 
26.03.12
14:37
(7) не взлетело) при 5360 дает 5500
16 Reset
 
26.03.12
14:38
(15) Проверь (10) ;)
17 Дукат
 
26.03.12
14:38
(14) а это работает кажется!
отпишусь чуть позже!
18 andrewks
 
26.03.12
14:39
(7) у тебя одна ма-а-аленькая ошибочка, а так почти идеально
19 Дукат
 
26.03.12
14:39
(16) ща. у тебя короче код. момент
20 Дукат
 
26.03.12
14:41
(16) работает.

кто что скажет про вариант (10)?
21 Omskdizel
 
26.03.12
14:42
(15) Блин, при приведении типа округляет...
(20) Если значения только целые, то взлетит
22 andrewks
 
26.03.12
14:43
(20) при дробных значениях может быть швах
23 s03
 
26.03.12
14:43
если не языком запросов, то проверь такое:

?(х%100=0, х, (Окр(х/100)+1)*100))

ну и опять же, если правильно, переделай на запрос
24 andrewks
 
26.03.12
14:43
(14) отработает при любых значениях
25 andrewks
 
26.03.12
14:44
(23) не языком запросов не интересно и не по сабжу
26 Omskdizel
 
26.03.12
14:45

ВЫБОР КОГДА ВЫРАЗИТЬ(Зн/100 КАК ЧИСЛО(15,0))*100 >= Зн ТОГДА
  ВЫРАЗИТЬ(Зн/100 КАК ЧИСЛО(15,0))*100
ИНАЧЕ
  (ВЫРАЗИТЬ(Зн/100 КАК ЧИСЛО(15,0))+1)*100 // Округлили
КОНЕЦ

Так проверь, это и с дробными должно работать
27 Omskdizel
 
26.03.12
14:46
А забавная задачка, я даж проснулся
28 Reset
 
26.03.12
14:46
Выразить((Х+49.99999999999999999999999)/100 как Число(10,0))*100
Некрасиво :)
29 s03
 
26.03.12
14:47
(25) полностью согласен, просто сначала хотел отработать саму логику, переделать правильный способ - задачка уже намного проще.
30 Reset
 
26.03.12
14:47
(29) Ну так на бумажке бы и отрабатывал логику
31 Omskdizel
 
26.03.12
14:48
(28) Но решение веселое, я чета даже не допер :)
32 Дукат
 
26.03.12
14:48
(24) да, у етбя самый красивый код. но вот покороче его просто хотца. думаю \ выбираю!


Большое ВСЕМ спасибо!


(27) :D и не говори.
33 Дукат
 
26.03.12
14:49
Дробный частей думаю не будет...
34 andrewks
 
26.03.12
14:49
(29) всё уже украдено до нас ©
v8: Округление до десятка
35 andrewks
 
26.03.12
14:50
(33) тогда бери (10)
36 Дукат
 
26.03.12
14:50
его и забрал! тестирую! спасибо большое!
37 Дукат
 
26.03.12
15:07
Всем спасибо еще раз! забрал (10)
зы было то же самое - но стремался + 49 добавить - казалось что ламерски, ан нет - народ не судит строго смотрю такое =)
38 НЕА123
 
26.03.12
15:17
для небольших целых, пятнично. типа так

Выбор когда X - РазностьДат(ДобавитьКДате(Дата(1,1,1), X/100, Секунда), Дата(1,1,1)) = 0
   Тогда Х
Иначе
   X + 100
Конец
39 НЕА123
 
26.03.12
15:19
Выбор когда X - РазностьДат(ДобавитьКДате(Дата(1,1,1), Секунда, X/100 ), Дата(1,1,1), Секунда) = 0

   Тогда Х
Иначе
   X + 100
Конец