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



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 человек.
Рекламное место пустует