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

Проблема с переводом чисел

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

попробуй с помощью этой штуки
    ГСЧ = Новый ГенераторСлучайныхЧисел(255);
    ИтСумма=0; ИтСуммаСтрока=0;
    Для Пи=1 По 1000 Цикл
        СлЧисло=ГСЧ.СлучайноеЧисло(0, 1000000)/1000000;
        СлЧислоСтрока=""+СлЧисло;
        ИтСумма=ИтСумма+СлЧисло;
        ИтСуммаСтрока=ИтСуммаСтрока+Число(СлЧислоСтрока);
        Сообщить(""+ИтСумма+"    "+ИтСуммаСтрока);
    КонецЦикла;    
 
добиться чтобы ИтСумма<> ИтСуммаСтрока  :)
   Mandel
 
17 - 05.01.08 - 00:32
Согласен, т.е. переводит правильно. После этого я эти числа пихаю в регистр сведений (ресурс стоимость типа число(20,10)), а потом в запросе все их выдираю и складываю.
   Mandel
 
18 - 06.01.08 - 15:08
Вот кому не тяжело проверить: будет ли сумма по колонке Стоимость совпадать с итоговой суммой в конце списка.
ВОт файлик: http://slil.ru/25321454
   неа123
19 - 06.01.08 - 15:44
(18) берешь из экселя?
увеличь количество отбражаемой дробной части. И все поймешь.
   Mandel
 
20 - 06.01.08 - 15:54
Беру Не из Excel.
   IronDemon
 
21 - 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. Табло же, например, не делает попыток округлить результат и показывает результат вычисления таким, какой он есть.
   неа123
22 - 06.01.08 - 16:00
(20) операторы грешат тем, что считают точностью как минимум 7 знаков, а отображают 5.
   Mandel
 
23 - 06.01.08 - 16:00
Не.Считает 12.3273.
   Mandel
 
24 - 06.01.08 - 16:01
Да и в Excel считает также. )
   Mandel
 
25 - 06.01.08 - 16:02
Дык я не делю, а просто складываю ))
   baklan22
 
26 - 06.01.08 - 17:48
Я так понял 
1.4 + 1.4 =2.8  Округление дает 3
а если округлять члены суммы то получится 2 (1+1=2)
Если в этом проблема, то тут ничего не сделаешь, надо выкручиваться как то.
   Mandel
 
27 - 06.01.08 - 18:13
Ну не так грубо конечно. Циферки хоть бы взяли тип 0.0001
   baklan22
 
28 - 07.01.08 - 11:02
(27) Разве есть принципиальная разница?  Как раз взял для наглядности округление до целого.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует