Вход | Регистрация
 

Math.ceil() в запросе 1С

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

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

ВЫБРАТЬ
ВЫРАЗИТЬ(&Параметр + 0.4999999999 КАК ЧИСЛО(10, 0)) КАК НаименьшееЦелоеКотороеБольшеИлиРавно

   Ненавижу 1С
 
15 - 03.10.17 - 14:44
(13) вот наиболее правильно, хотя и сложно

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

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

Выразить(моеЧисло+0.49999999999999999999999999999999999999999999999999999999999999999999999 КАК ЧИСЛО(10,0))


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.