Имя: Пароль:
1C
1С v8
v8: В чем причина округления?
0 ezhikofff
 
16.07.13
13:07
Народ добрый день,
считаю на калькуляторе 79 627.13 / 93 355.93 = 0.852941318242987
а запрос упорно выдает результат 0.852941

В чем может быть причина?
1 Волшебник
 
16.07.13
13:08
в округлении
2 shuhard
 
16.07.13
13:09
(0) что это у вас часы всё время показывают пол двенадцатого - это барометр (с)
3 ezhikofff
 
16.07.13
13:09
строка запроса
(НДСПредъявленныйОстаткиИтог.НДСОстаток - ЕСТЬNULL(НДСПредъявленныйРеализация0Остатки.НДСОстаток, 0)) / НДСПредъявленныйОстаткиИтог.НДСОстаток)

где тут округление?
4 Волшебник
 
16.07.13
13:10
(3) Оно неявное
5 Волшебник
 
16.07.13
13:11
Кстати, твой калькулятор тоже округляет.
Вот более точный ответ: 0,85294131824298681401385000395797
6 ezhikofff
 
16.07.13
13:11
(4) и как его выявить?
7 Fragster
 
гуру
16.07.13
13:12
Выбрать выразить(0 как Число(15,12)) + 79627.13 / 93355.93
8 H A D G E H O G s
 
16.07.13
13:12
0,852941318242986814013850003957970319
9 Волшебник
 
16.07.13
13:13
(8) Не выпендривайся
10 ezhikofff
 
16.07.13
13:14
(5) я думаю 15 знаков будет достаточно чтобы сошлись эти гребанные копейки:)
11 H A D G E H O G s
 
16.07.13
13:14
выбрать
79627.13 / 93355.93
даст
0,852941318242986814013850003957970319
12 YHVVH
 
16.07.13
13:14
ВЫБРАТЬ 79627.13 / 93355.93

все нормально выдает у меня
0,852941318242986814013850003957970319
13 Fragster
 
гуру
16.07.13
13:15
максимум на скуле 2005 получается так (правда результат не меняется от предыдущих):

Выбрать выразить(0 как Число(38,38)) + 79627.13 / 93355.93
14 ezhikofff
 
16.07.13
13:15
(7) ВЫРАЗИТЬ((НДСПредъявленныйОстаткиИтог.НДСОстаток - ЕСТЬNULL(НДСПредъявленныйРеализация0Остатки.НДСОстаток, 0)) / НДСПредъявленныйОстаткиИтог.НДСОстаток КАК ЧИСЛО(25, 20))

выдает 0.852941
15 Fragster
 
гуру
16.07.13
13:16
(14) выражать надо не результат, а операнды
16 ezhikofff
 
16.07.13
13:16
(15) еще раз
17 Fragster
 
гуру
16.07.13
13:18
(16) скуль выбирает тип результата по типу операндов
18 Xapac
 
16.07.13
13:18
(10) НЕТ. для копеек делают по другому. они у тебя никогда не сойдутся.
19 Fragster
 
гуру
16.07.13
13:19
(11)
выбрать
Выразить(79627.13 КАК Число(15,2)) / Выразить(93355.93  КАК Число(15,2))
20 Fragster
 
гуру
16.07.13
13:20
(18) прав
21 ezhikofff
 
16.07.13
13:20
(18) а че с ними делать?
там 10 копеек с 2 мульонов не сходиться
22 beer_fan
 
16.07.13
13:20
(18) +100500
23 Fragster
 
гуру
16.07.13
13:20
(21) избавься от деления в пользу вычитания
24 ezhikofff
 
16.07.13
13:21
(19) ща попробуем спс:)
25 ezhikofff
 
16.07.13
13:21
(21) млять так этож типово
26 ezhikofff
 
16.07.13
13:21
й запрос
27 ezhikofff
 
16.07.13
13:27
((ВЫРАЗИТЬ(НДСПредъявленныйОстаткиИтог.НДСОстаток КАК ЧИСЛО(15, 2))) -
(ВЫРАЗИТЬ(ЕСТЬNULL(НДСПредъявленныйРеализация0Остатки.НДСОстаток, 0) КАК ЧИСЛО(15, 2)))) /
(ВЫРАЗИТЬ(НДСПредъявленныйОстаткиИтог.НДСОстаток КАК ЧИСЛО(15, 2)))
вот оно чего выдало
0.8529413182429868140138
28 Fragster
 
гуру
16.07.13
13:27
(27) ну да. ведь (19) было к (11). А тебе надо до целевой точности увеличивать.
29 Ненавижу 1С
 
гуру
16.07.13
13:29
а у меня выдает 0,852941318242986814013850003957970319
из запроса

выбрать 79627.13 / 93355.93
30 ezhikofff
 
16.07.13
13:30
(28) только все равно я тут не контролирую число знаков после зпт, а как их еще увеличить?
31 Fragster
 
гуру
16.07.13
13:31
больше 0,852941318242986814013850003957970319 знаков, судя по всему, не получишь
32 Fragster
 
гуру
16.07.13
13:32
(30) контролируешь, но косвенно. типа скуль сам решает, сколько знаков у результата и выводит в соответствии. ЕМНИП просто числа он воспринимает как 6 знаков, а у тебя не просто числа, а типизированные колонки
33 ezhikofff
 
16.07.13
13:33
так у меня и этого не получает, вон на ...138 конец
34 Fragster
 
гуру
16.07.13
13:35
(33) поставь везде точность (32,32)
35 Lama12
 
16.07.13
13:38
Какое выразить в запросах? Народ вы стебетесь?
Там технические ограничения на точность вычисления в запросах. На ИТС про это написано.
36 ezhikofff
 
16.07.13
13:39
да догнал он и с Число(15,2)
ну буду иметь ввиду теперь спасибо
37 ezhikofff
 
16.07.13
13:40
(35) в чем заключается ограничение?
38 Xapac
 
16.07.13
13:41
(21)дано 10
распределить допустим 1/3 на 3 человека

1-у 10/3 = 3,333
осталось 10 - 3,333 = 6,667
2-у 10/3 = 3,333
осталось 6,668 - 3,333 = 3,334
3-у 10/3 = 3,333
осталось 3,334 - 3,333 = 0,001

3-у отдаешь одну сотую копейки.
39 Lama12
 
16.07.13
13:41
(37) Еще и книжки за тебя почитать?
40 ezhikofff
 
16.07.13
13:42
(34) нее 32 многовать, скуль орать начинает
41 ezhikofff
 
16.07.13
13:43
(39) ну для народа чеж не читануть то?))
42 hhhh
 
16.07.13
14:36
(41) а вы математику в школе учили? Приближенные вычисления?
43 Ненавижу 1С
 
гуру
16.07.13
15:07
прикольно получается:

выбрать
79627.13/93355.93,
выразить(79627.13 как число(15,2)) / выразить(93355.93 как число(15,2)),
выразить(79627.13 как число(15,3)) / выразить(93355.93 как число(15,3)),
выразить(79627.13 как число(15,4)) / выразить(93355.93 как число(15,4)),
выразить(79627.13 как число(15,5)) / выразить(93355.93 как число(15,5)),
выразить(79627.13 как число(15,6)) / выразить(93355.93 как число(15,6)),
выразить(79627.13 как число(15,7)) / выразить(93355.93 как число(15,7)),
выразить(79627.13 как число(15,8)) / выразить(93355.93 как число(15,8))


http://sqlbooks.ru/readarticle.aspx?part=02&file=tsql14
44 EvgeniuXP
 
16.07.13
15:25
(43) может ты это имел в виду:

ВЫРАЗИТЬ(ВЫРАЗИТЬ(79627.13 КАК ЧИСЛО(15, 2)) / ВЫРАЗИТЬ(93355.93 КАК ЧИСЛО(15, 2)) КАК ЧИСЛО(15,2))

а то что результат одинаковый (в твоем примере) - прикольного не вижу ничего.
45 Ненавижу 1С
 
гуру
16.07.13
15:28
(44) не это, там результат немного разный, по крайней мере под  MS SQL
46 Drac0
 
16.07.13
15:29
(44) у меня тоже для 4,5,6 отличается от других.
47 Ненавижу 1С
 
гуру
16.07.13
15:30
+(45) да и в файловой, но отличается от MS SQL
возможно и от релиза 1с тоже зависит
48 Fragster
 
гуру
16.07.13
15:37
выбрать
79627.13/93355.93,
выразить(79627.13 как число(7,2)) / выразить(93355.93 как число(8,2)),
выразить(79627.13 как число(8,3)) / выразить(93355.93 как число(8,3)),
выразить(79627.13 как число(9,4)) / выразить(93355.93 как число(9,4)),
выразить(79627.13 как число(10,5)) / выразить(93355.93 как число(10,5)),
выразить(79627.13 как число(11,6)) / выразить(93355.93 как число(11,6)),
выразить(79627.13 как число(12,7)) / выразить(93355.93 как число(12,7)),
выразить(79627.13 как число(13,8)) / выразить(93355.93 как число(13,8)),
выразить(79627.13 как число(14,9)) / выразить(93355.93 как число(14,9)),
выразить(79627.13 как число(15,10)) / выразить(93355.93 как число(15,10)),
выразить(79627.13 как число(16,11)) / выразить(93355.93 как число(16,11)),
выразить(79627.13 как число(17,12)) / выразить(93355.93 как число(17,12))



интересно, почему оно при 12 меньше, чем при 9
49 Fragster
 
гуру
16.07.13
15:38
вернее понятно, почему - написано по ссылке. интересно, почему именно такие правила приняли
50 Ненавижу 1С
 
гуру
16.07.13
15:41
(49) хз, в Firebird все гораздо проще, точность результата определяется как сумма точностей аргументов
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс