Имя: Пароль:
1C
 
Math.ceil() в запросе 1С
,
0 svsvsv
 
03.10.17
14:22
Как в запросе 1С получить наименьшее целое число, которое больше аргумента? (например, в SQL есть такие функции CEILING(), в java - Math.ceil())

Есть вариант так:
ВЫБРАТЬ
ВЫБОР
КОГДА ВЫРАЗИТЬ(&Параметр1 КАК ЧИСЛО(10,0)) = &Параметр1 ТОГДА &Параметр1
ИНАЧЕ ВЫРАЗИТЬ(&Параметр1+0.5 КАК ЧИСЛО(10,0))
КОНЕЦ КАК Ceil

Знает ли кто-то более короткий/оптимальный/кошерный вариант?
1 Ненавижу 1С
 
гуру
03.10.17
14:24
ВЫРАЗИТЬ(&Параметр1-0.5 КАК ЧИСЛО(10,0)) КАК Ceil
2 Numerus Mikhail
 
03.10.17
14:25
Выразить(моеЧисло+0.4999999999 КАК ЧИСЛО(10,0))
3 svsvsv
 
03.10.17
14:26
(1)
Параметр1 = 0,5
Окр(0,5 - 0 ,5) = 0
а надо 1
4 Волшебник
 
модератор
03.10.17
14:26
(1) +1 забыл
5 Ненавижу 1С
 
гуру
03.10.17
14:27
(3)(4) вообще неправильно прочитал как целую часть
6 Ненавижу 1С
 
гуру
03.10.17
14:28
(0) строго больше или НЕ МЕНЬШЕ?
7 svsvsv
 
03.10.17
14:29
(2) такой вариант более короткий.
Но, если моеЧисло = 0.00000000000000001 (что маловероятно), то работать не будет
8 svsvsv
 
03.10.17
14:30
(6)
ceil(1,0) = 1
ceil(1,1) = 2
ceil(1,9) = 2
ceil(2,0) = 2
9 Numerus Mikhail
 
03.10.17
14:32
(8) тогда как в (2), только + 0.5
10 svsvsv
 
03.10.17
14:32
(6)
согласен, определение неверно написал (скопировал с другого форума)
Должно быть:
The method ceil gives the smallest integer that is greater than or equal to the argument.
Наименьшее целое число которое больше или равно аргументу (то есть НЕ МЕНЬШЕ)
11 svsvsv
 
03.10.17
14:32
(9)
см. (3)
12 svsvsv
 
03.10.17
14:33
пардон.

Параметр1 = 1
Окр(1+0,5) = 2
а должно быть 1
13 svsvsv
 
03.10.17
14:35
в общем, наверное как в (2) будет наиболее правильно
Спасибо.
14 svsvsv
 
03.10.17
14:41
Если кому надо:

ВЫБРАТЬ
ВЫРАЗИТЬ(&Параметр + 0.4999999999 КАК ЧИСЛО(10, 0)) КАК НаименьшееЦелоеКотороеБольшеИлиРавно
15 Ненавижу 1С
 
гуру
03.10.17
14:44
(13) вот наиболее правильно, хотя и сложно

ВЫРАЗИТЬ(&Параметр1-0.5 КАК ЧИСЛО(10, 0))+ВЫРАЗИТЬ(&Параметр1 - (ВЫРАЗИТЬ(&Параметр1-0.5 КАК ЧИСЛО(10, 0))) КАК ЧИСЛО(10, 0))
16 Numerus Mikhail
 
03.10.17
14:47
(15) при 0.1 выводит 0
17 svsvsv
 
03.10.17
14:47
(15)
Для 1.01 выдает 1
18 svsvsv
 
03.10.17
14:47
(15) работает как обычное округление
19 Ненавижу 1С
 
гуру
03.10.17
14:49
+(15) ВЫРАЗИТЬ(&Параметр1-0.5 КАК ЧИСЛО(10, 0))+ВЫРАЗИТЬ(&Параметр1 - (ВЫРАЗИТЬ(&Параметр1-0.5 КАК ЧИСЛО(10, 0)))+0.5 КАК ЧИСЛО(10, 0))
20 Numerus Mikhail
 
03.10.17
14:50
(19) для 0 выдает 1 :)
21 Ненавижу 1С
 
гуру
03.10.17
14:51
(20) нет
22 Numerus Mikhail
 
03.10.17
14:52
(21) у меня да)
23 Ненавижу 1С
 
гуру
03.10.17
14:53
(22) MS SQL Server 2014
24 svsvsv
 
03.10.17
14:53
(19) для 0 выдает 1
25 Numerus Mikhail
 
03.10.17
14:53
26 svsvsv
 
03.10.17
14:54
(19) MS SQL Server 2008 R2. Для 0 выдает 1
27 Ненавижу 1С
 
гуру
03.10.17
15:09
последняя попытка:

    ВЫРАЗИТЬ(&Параметр1-0.5 КАК ЧИСЛО(10, 0))+1-ВЫРАЗИТЬ(ВЫРАЗИТЬ(&Параметр1-0.5 КАК ЧИСЛО(10, 0))-&Параметр1+0.5 КАК ЧИСЛО(10,0))
28 Ненавижу 1С
 
гуру
03.10.17
15:10
+(27) хотя для 0 так и не заработало
а вот для 1,2,3 и т.д. вполне
29 Numerus Mikhail
 
03.10.17
15:13
(27) Неправильно отрабатывает с отрицательными
30 Numerus Mikhail
 
03.10.17
15:14
(28) с целыми, имею в виду
-2 => -1
31 Ненавижу 1С
 
гуру
03.10.17
15:16
(29)(30) да, но тут видимо уже не поделаешь ничего

вот хотя бы для всех неотрицательных правильно:

ВЫРАЗИТЬ(&Параметр1+0.5 КАК ЧИСЛО(10, 0))+1-ВЫРАЗИТЬ(ВЫРАЗИТЬ(&Параметр1+0.5 КАК ЧИСЛО(10, 0))-&Параметр1-0.5 КАК ЧИСЛО(10,0))-1
32 Numerus Mikhail
 
03.10.17
15:18
(31) Ага, вот так вроде норм работает.
33 Ненавижу 1С
 
гуру
03.10.17
15:32
Если кому-то интересно, вот для ЛЮБЫХ чисел:

ВЫРАЗИТЬ(&Параметр1-ВЫРАЗИТЬ(&Параметр1-0.5 КАК ЧИСЛО(10, 0))+0.5 КАК ЧИСЛО(10, 0))-ВЫРАЗИТЬ(ВЫРАЗИТЬ(&Параметр1-ВЫРАЗИТЬ(&Параметр1-0.5 КАК ЧИСЛО(10, 0))+0.5 КАК ЧИСЛО(10, 0))-&Параметр1+ВЫРАЗИТЬ(&Параметр1-0.5 КАК ЧИСЛО(10, 0))-0.5 КАК ЧИСЛО(10,0))+ВЫРАЗИТЬ(&Параметр1-0.5 КАК ЧИСЛО(10, 0))
34 Numerus Mikhail
 
03.10.17
15:46
(33) В таком случае, мне кажется, проще уже использовать вариант из (0)
35 Ненавижу 1С
 
гуру
03.10.17
17:14
(34) я из спортивного интереса уже
36 h-sp
 
03.10.17
17:21
тогда уж как в (2)

Выразить(моеЧисло+0.49999999999999999999999999999999999999999999999999999999999999999999999 КАК ЧИСЛО(10,0))
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой