Имя: Пароль:
1C
 
Проблема с переводом чисел
0 Mandel
 
03.01.08
18:41
Почему при переводе чисел (с дробной частью) из строкого значения и суммирования их получается не совпадение итоговых чисел (посчитанных ручками и в 1С). Итоги отличаются где-то на сотые доли.
1 IronDemon
 
03.01.08
18:42
Ты про калькулятор?
2 nop
 
03.01.08
18:43
(0) округление?*
3 Mandel
 
03.01.08
19:10
Нет.Я не про калькулятор. Я про обычную функцию:
Число(Строка1)+Число(Строка2)+...Число(СтрокаN)
4 AngelicCare
 
03.01.08
20:34
Ряд чисел включи в постинг...
5 Mandel
 
03.01.08
23:08
0.0000, 0.0700, 0.0887, 0.0490, 0.0629, 0.3162, 0.0828, ...
6 baklan22
 
03.01.08
23:25
Так и должно быть, арихметика :) . Вернее не должно, но есть . Как от этого уйти... интересный вопрос.
7 Mandel
 
04.01.08
01:34
Что значит так должно быть ))
9 Asmody
 
модератор
04.01.08
01:58
10 Mandel
 
04.01.08
12:27
А как эту проблему обойти?
11 Mandel
 
04.01.08
16:52
Видимо так и вопрос будет висеть в воздухе ))
12 Garkin
 
04.01.08
18:45
Число("0.0000")+ Число("0.0700")+ Число("0.0887")+Число("0.0490")+ Число("0.0629")+ Число("0.3162")+ Число("0.0828")
у меня в табло получается 0,6696  , я наверное что-то не понимаю?
13 Mandel
 
04.01.08
21:46
Это при маленькой выборке, а я брал выборкы 250 и 1000 чисел.
14 Garkin
 
04.01.08
22:16
(13) и что ручками пересчитывал? УВАЖАЮ!
15 Mandel
 
04.01.08
22:25
Да там уже все подсчитано за меня ;)
Ошибка где то 0.001 долях при выборке около 200. При выборке около 1000 погрешность 0.01
16 Garkin
 
04.01.08
23:32
Незнаю, в чем у тебя ошибка, но однозначно она не связана с преобразованием строки в число.

попробуй с помощью этой штуки

   ГСЧ = Новый ГенераторСлучайныхЧисел(255);
   ИтСумма=0; ИтСуммаСтрока=0;
   Для Пи=1 По 1000 Цикл
       СлЧисло=ГСЧ.СлучайноеЧисло(0, 1000000)/1000000;
       СлЧислоСтрока=""+СлЧисло;
       ИтСумма=ИтСумма+СлЧисло;
       ИтСуммаСтрока=ИтСуммаСтрока+Число(СлЧислоСтрока);
       Сообщить(""+ИтСумма+"    "+ИтСуммаСтрока);
   КонецЦикла;    

добиться чтобы ИтСумма<> ИтСуммаСтрока  :)
17 Mandel
 
05.01.08
00:32
Согласен, т.е. переводит правильно. После этого я эти числа пихаю в регистр сведений (ресурс стоимость типа число(20,10)), а потом в запросе все их выдираю и складываю.
18 Mandel
 
06.01.08
15:08
Вот кому не тяжело проверить: будет ли сумма по колонке Стоимость совпадать с итоговой суммой в конце списка.
ВОт файлик: http://slil.ru/25321454
19 неа123
 
06.01.08
15:44
(18) берешь из экселя?
увеличь количество отбражаемой дробной части. И все поймешь.
20 Mandel
 
06.01.08
15:54
Беру Не из Excel.
21 IronDemon
 
06.01.08
15:57
Не в этом ли проблема?

Заметил такую вещь: если в калькуляторе 1С8.1 написать 1/3*3 результат 1, а если это же выражение написать где-то в коде то результат будет 0,9999999...9 (1/6*6 = 1, в коде 1/6*6 = 1,000000...02)
В 1cv7.7 что в калькуляторе что в коде эти выражения равны 1.

Русанов Дмитрий (1С, Москва)
Числовые величины и в 1С:Предприятии 7.7 и в 1С:Предприятии 8.x представляются как десятичные числа с фиксированной точкой и неограниченной точностью. Сделано это вполне сознательно, так как десятичные числа более адекватны для представления различных величин в программном обеспечении делового назначения.


Если еще точнее, то в 1С:Предприятии 7.7 используется система счисления с основанием 10000, а в 1С:Предприятии 8.x – система счисления с основанием 1000000000. Но, по сути, речь все равно идет о десятичной арифметике. Большее, но кратное десяти основание системы счисления выбрано для повышения эффективности вычислений.


Соответственно, и вычисления производятся над такими числами. При делении, однако, есть необходимость в ограничении числа разрядов результата деления, так как результатом деления, в общем случае, может являться периодическая дробь.


В 1С:Предприятии 7.7 при делении точность результата ограничивалась 20-ю десятичными разрядами после точки.


В 1С:Предприятии 8.1 при делении точность результата определяется как точность делимого плюс три разряда по основанию 1000000000. То есть, при делении 1 / 3 результат будет представлен с точностью до 3-х разрядов по основанию 1000000000 или до 27-и десятичных разрядов. А при делении 0.1 / 3 результат будет с точностью до 4-х разрядов по основанию 1000000000 или до 36-и десятичных разрядов.


В такой форме вычисления производятся всегда: независимо от того в коде это делается, в калькуляторе или еще где-либо. Вопрос в том, как форматируется результат. Калькулятор в 1С:Предприятии 8.1 при выводе результата вычисления округляет его до десяти десятичных разрядов после точки. Соответственно, при округлении результата выражения


1/3*3, который равен 0,999999999999999999999999999 получится 1. Табло же, например, не делает попыток округлить результат и показывает результат вычисления таким, какой он есть.
22 неа123
 
06.01.08
16:00
(20) операторы грешат тем, что считают точностью как минимум 7 знаков, а отображают 5.
23 Mandel
 
06.01.08
16:00
Не.Считает 12.3273.
24 Mandel
 
06.01.08
16:01
Да и в Excel считает также. )
25 Mandel
 
06.01.08
16:02
Дык я не делю, а просто складываю ))
26 baklan22
 
06.01.08
17:48
Я так понял
1.4 + 1.4 =2.8  Округление дает 3
а если округлять члены суммы то получится 2 (1+1=2)
Если в этом проблема, то тут ничего не сделаешь, надо выкручиваться как то.
27 Mandel
 
06.01.08
18:13
Ну не так грубо конечно. Циферки хоть бы взяли тип 0.0001
28 baklan22
 
07.01.08
11:02
(27) Разве есть принципиальная разница?  Как раз взял для наглядности округление до целого.