Имя: Пароль:
1C
1С v8
Итог ТЧ документа через ComConnector
0 Fram
 
02.10.12
17:27
Из 82 в серверной процедуре тонкого клиента выполняю следующий код:

Коннектор = Новый COMОбъект("V81.ComConnector");
БП = Коннектор.Connect("...");
...
Док = БП.Документы.РеализацияТоваровУслуг.ПолучитьСсылку(БП.NewObject("УникальныйИдентификатор", ИД));
Сообщить(Док.Услуги.Итог("Сумма"))

Вместо 80.85 получаю в окне сообщений 80.499999999999 ?!
Это шо за фигня такая?
1 Wobland
 
02.10.12
17:29
а если другими методами документ получить?
2 IronDemon
 
02.10.12
17:29
2+2=3.99999999999
3 ptiz
 
02.10.12
17:30
(0) Округляй.
4 Maxus43
 
02.10.12
17:31
до сих пор помню как на паскале чото псиал, 9 / 3 = 2.9999999999999
5 acsent
 
02.10.12
17:31
такова природа вещ. чисел
http://habrahabr.ru/post/112953/
6 Fram
 
02.10.12
17:31
(3) ну это понятно.. 2 часа потраченного времени жалко просто
7 acsent
 
02.10.12
17:31
с целыми числами нет такого косяка
8 DrShad
 
02.10.12
17:32
а 80.85 каким способом получены?
9 Fram
 
02.10.12
17:32
(8) Это число в документе. Тип поля Число (15, 2)
10 DrShad
 
02.10.12
17:34
(9) уверен?
11 DrShad
 
02.10.12
17:35
+(10) итоги по колонкам ТЧ в документе не хранятся
12 Fram
 
02.10.12
17:36
(11) т.е. это нормально когда в поле написано 80.85, а Итог возвращает 80.499999999999?
13 DrShad
 
02.10.12
17:38
(12) в каком еще поле? ты глаза разуй
14 Fram
 
02.10.12
17:43
(13) в поле табличной части документа
15 DrShad
 
02.10.12
17:44
(14) у тебя в ТЧ есть поле Итог?
16 Fram
 
02.10.12
17:47
(15) а я где то написал что есть?..
у таб. части функция такая есть и в (12) я у тебя спросил считаешь ли ты нормальным что когда в поле написано число 80.85, функция Итог возвращает 80.499999999999?
17 Wobland
 
02.10.12
17:48
(16) кто тебе не давал сказать, что в ТЧ одна строка с суммой 80.85, а получаешь итог от неё 80.49?
18 DrShad
 
02.10.12
17:48
[ когда в поле написано число 80.85]
19 Fram
 
02.10.12
17:48
ха!

Коннектор = Новый COMОбъект("V81.ComConnector");
БП = Коннектор.Connect("...");
...
Док = БП.Документы.РеализацияТоваровУслуг.ПолучитьСсылку(БП.NewObject("УникальныйИдентификатор", ИД));
Сообщить(Окр(Док.Услуги.Итог("Сумма"), 2))

Результат такой же 80.499999999999
20 Fram
 
02.10.12
17:48
(18) а я это поле разве Итогом назвал?
21 Fram
 
02.10.12
17:49
(18) что доказать то пытаешься?
22 zbv
 
02.10.12
17:49
по моему, как 80.499999999999 не округляй 80.85 не получится.
23 DrShad
 
02.10.12
17:51
(22) +1, что в (19) чувак  принципиально нового увидеть :)))
24 Fram
 
02.10.12
17:53
посыпаю голову пеплом, опечатался 80,849999999999
25 Wobland
 
02.10.12
17:53
(24) мать-перемать!!
26 Wobland
 
02.10.12
17:54
+(25) до сих пор не дошло?
27 Fram
 
02.10.12
17:56
(26) ну и?
28 Wobland
 
02.10.12
17:57
29 Wobland
 
02.10.12
17:58
(27) у тебя не значение поля получается, а результат какой-то функции
30 Serginio1
 
02.10.12
17:58
в 1С чила хранятся в формате BCD, в ком нет такого вида числа как и Decimal. Все приводится к Double или ниже классом. А это уже двоичная запись
31 Fram
 
02.10.12
18:00
(30) это оправдывает такой результат функции?
32 Fram
 
02.10.12
18:00
Выпутался
Сумма = 0;
Сумма = Сумма + Окр(Док.Услуги.Итог("Сумма"), 2);
33 DrShad
 
02.10.12
18:01
(32) ну хвала великим яйцам
34 Fram
 
02.10.12
18:03
(33) спасибо за "помощь"
35 DrShad
 
02.10.12
18:03
(34) да мне то за что?
36 Fram
 
02.10.12
18:07
(35) ну не знаю.. а зачем писал посты в этой ветке?
37 DrShad
 
02.10.12
18:08
(36) да как бы пинал в нужном направлении :)
38 Fram
 
02.10.12
18:15
вот, давай ты ребенка своего будешь в нужном направлении пинать, а с форумчанами в другом тоне общаться
Ошибка? Это не ошибка, это системная функция.