Имя: Пароль:
1C
 
Точность арифметической операции в запросе до 10-ти знаков
0 RoverVictor
 
11.01.09
18:47
Столкнулся с такой проблемой:

В запросе на нижних уровнях вычисляется процент - одно число (15,2)делится на другое (15,2).

Затем полученный процент активно используется на верхних уровнях запроса. При большом разбросе исходных чисел получаю большую погрешность, недопустимую.

Пробовал использовать ВЫРАЗИТЬ(Процент КАК Число (20,10)), ставил на всех уровнях - не помогает. Не удается увеличить дробную часть больше чем до 5 знаков (стандарт)

Пробовал увеличить разрядность исходных данных с (15,2) до (20,10) - результат все те же - 5 знаков после запятой.


Делать простым кодом, где операции выполняются с космической точностью не хочется - придется реализовывать несколько джойнов, что скажется на быстродействии.
1 RoverVictor
 
11.01.09
18:50
Прошу прощения, это было первое сообщение на форуме, не удалось прикрутить тему к нужной ветке.

Конечно же это 1С v8 а не v7 =(
2 ado
 
11.01.09
18:52
(1) Как вариант, умножить делимое на 10000 ... но, ИМХО, что-то перемудрил ты с запросом ...
3 AndOne
 
11.01.09
18:53
4 IronDemon
 
11.01.09
18:56
Что-то ты не то делаешь.
Запрос покажи.
5 RoverVictor
 
11.01.09
22:11
(3) За ссылку спасибо, не увидел той темы, завтра буду смотреть, почему у меня не работает
6 simol
 
11.01.09
22:33
(5)То ж твоя тема
7 RoverVictor
 
12.01.09
08:40
Вот кусок текста запроса (упрощенный):

ВЫБРАТЬ
   ВЫРАЗИТЬ(СуммыАллокации.СуммаАллокацииВРазрезеПР_ВГ_ВД / ЕСТЬNULL(Доходы.ДоходВРазрезеВД, 1) КАК ЧИСЛО(25, 10)) КАК Процент
ИЗ
...

Группировок нет. Если напрямую задать числа в запрос - все Ок, получаю сколько нужно цифр после запятой. Если использую данные из БД - то не больше 5-ти цифр.

Для примера:
1) Данные из БД  50229,215 / 500000005 = 0,0001
2) Если указать числа непсредственно в запросе 50229,215 / 500000005 = 0,0001004584

Для одной строки погрешность получается небольшая, но учитывая что строк много и числа большИе - разница контрольных сумм получается большой.
8 ado
 
12.01.09
12:18
(7) Ну дык выражай свое отношение в неких условных единицах, предварительно умножив делимое на 10000, или там на 1000000. Только не забудь потом результат конечный обратно на это же число разделить.

А вообще, где в запросе у тебя это используется?
9 Immortal
 
12.01.09
12:19
странно, вот у меня 1/3 нормально выдаёт..
10 ado
 
12.01.09
12:21
(9) Дык и автор пишет, что если числа непосредственно в запросе указывать, то все работает.
11 Fragster
 
гуру
12.01.09
12:22
ВЫБРАТЬ
   ВЫРАЗИТЬ(СуммыАллокации.СуммаАллокацииВРазрезеПР_ВГ_ВД КАК ЧИСЛО(25, 10)) / ВЫРАЗИТЬ(ЕСТЬNULL(Доходы.ДоходВРазрезеВД, 1) КАК ЧИСЛО(25, 10)) КАК Процент
12 Fragster
 
гуру
12.01.09
12:23
(11) потому как скуль приводит к типу операндов
13 RoverVictor
 
12.01.09
13:02
(12) Да, так в итоге и сделал. Заработало.

Спасибо!
Независимо от того, куда вы едете — это в гору и против ветра!