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