|
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
|
Если кому надо:
ВЫБРАТЬ
|
|||
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)) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |