![]() |
|
Проблема с переводом чисел | ☑ | ||
---|---|---|---|---|
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) Разве есть принципиальная разница? Как раз взял для наглядности округление до целого.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |