|
Можно ли посчитать пропорцию в запросе с большей точностью? unenu, Garykom, PR, Fedor-1971, Гена, DeeK, АгентБезопаснойНацио, Asphalt, Timon1405, Ёпрст, evgeniy_n, Бычье сердце, Гипервизор, mortal, toypaul, ads55, ryutao, rozer76, Vstur, Толич, Philix, RVN, vicof, integer, kauksi, shuhard, sikuda, paramedic, alexxx961503, arsik, Irbis, Мультук, Злопчинский, zenik, Crusher, Климов Сергей, Волшебник, alex73, d4rkmesa, AAA, _Batoo, Prog_man
| ☑ | ||
|---|---|---|---|---|
|
0
Asphalt
19.02.26
✎
14:15
|
Добрый день.
Пытаюсь в запросе посчитать пропорцию простым делением текущей суммы в строке таблицы на итоговую сумму таблицы. Но получается слишком грубое округление (даже без использования округлений). Итоговый результат гуляет на 6-8%, есть ли какие-то методы снижения погрешности? |
|||
|
1
unenu
19.02.26
✎
14:22
|
где запрос?
обработка через ВЫРАЗИТЬ(х/у - 0.5 КАК ЧИСЛО(15, 0)) + ....? |
|||
|
2
ads55
19.02.26
✎
14:26
|
(0) "на 6-8%" - Умножь входящие числа на миллион - точность будет выше.
|
|||
|
3
Asphalt
19.02.26
✎
14:26
|
Нет, просто Таблица1.Сумма / ТаблицаИтоговая.Сумма
Без округлений Обе таблицы сохранены как временные |
|||
|
4
Asphalt
19.02.26
✎
14:27
|
Умножение на миллион не помогает, погрешность та же самая
|
|||
|
5
Мультук
гуру
19.02.26
✎
14:27
|
(0)
Говорят, что МаленькоеЧисло/БольшоеЧисло*ДругоеБольшоеЧисло отличается от МаленькоеЧисло * ДругоеБольшоеЧисло/БольшоеЧисло Врут, небось (с) |
|||
|
6
АгентБезопасной Нацио
19.02.26
✎
14:27
|
(2) Может, он разреженные слау методом гаусса решает?
|
|||
|
7
Asphalt
19.02.26
✎
14:32
|
(5) Ну я попробовал Таблица1.Сумма * 1000000 / ТаблицаИтоговая.Сумма КАК Пропорция
В сумме ровно то же по разрядам, что и без миллиона. Только запятая сдвигается. |
|||
|
8
Garykom
гуру
19.02.26
✎
14:32
|
(0) Прикол хочешь?
Там еще и точность зависит от СУБД и ее настроек да Если точность недостаточна - приходится расчеты производить вне запросов |
|||
|
9
ads55
19.02.26
✎
14:42
|
(7) А возводить в квадрат, а потом извлекать корень не пробовал?
Ты задачу опиши - и что делал. |
|||
|
10
Irbis
19.02.26
✎
14:45
|
Тут главное чтобы одночлен на многочлен делить по запросу не заставили
|
|||
|
11
АгентБезопасной Нацио
19.02.26
✎
14:48
|
(10) "членораздельная речь - это речь человека, которому член делят на многочлен"©
|
|||
|
12
Толич
19.02.26
✎
15:09
|
(4) Не может быть. Запрос с умножением на миллион в студию.
|
|||
|
13
Asphalt
19.02.26
✎
15:13
|
(9) Задача простая, распределить некие общие надбавки на таблицу с суммами, по пропорции этих сумм в таблице.
Я группирую таблицу, чтобы получить её итоговую сумму и записываю в ТаблицаИтоговая. После чего добавляю надбавку по пропорции ТаблицаНадбавок.Надбавка * Таблица.Сумма / ТаблицаИтоговая.Сумма Оно всё делит правильно, но приблизительно. Из-за недостаточной точности при делении, предполагаю. Вот пытаюсь узнать, есть ли способ как-то точность увеличить. |
|||
|
14
Толич
19.02.26
✎
15:18
|
(13)
В запросе 1000000 * ТаблицаНадбавок.Надбавка * Таблица.Сумма / ТаблицаИтоговая.Сумма Результат из запроса Надбавка = ВыборкаДетальныеЗаписи.СуммаНадбавки / 1000000 |
|||
|
15
Garykom
гуру
19.02.26
✎
15:23
|
(13) Это древний баян
Что 0.33+0.33+0.33 <> 1 |
|||
|
16
Garykom
гуру
19.02.26
✎
15:20
|
(14) У него не в этом проблема
Он суммы (надбавки) в процентном соотношении распределяет И сумма распределенных не сходится с суммой выделенного )) |
|||
|
17
Garykom
гуру
19.02.26
✎
15:20
|
(16)+ Короче см (15)
Выделили премию на весь отдел в 1 рубль Надо разделить на 3х сотрудников... |
|||
|
18
unenu
19.02.26
✎
15:21
|
(13) скорее (8) прав. как правило в настройках СУБД точность 6 знаков по умолчанию.
выполните запрос в консоли Выбрать ВЫРАЗИТЬ(15.7/13 КАК ЧИСЛО(27,25)) и покажите тут результат. |
|||
|
19
АгентБезопасной Нацио
19.02.26
✎
15:24
|
(16) так что мешает погрешность добавить к последней (или первой)
|
|||
|
20
Garykom
гуру
19.02.26
✎
15:25
|
(19) Запросами?
|
|||
|
21
АгентБезопасной Нацио
19.02.26
✎
15:28
|
(20) Ну а чо бы и нет?
забавнее другое - его просят показать запрос, а он молчит как рыба об лёд.. |
|||
|
22
unenu
19.02.26
✎
15:29
|
а если так, то сколько % потерь?
ВЫРАЗИТЬ((ТаблицаНадбавок.Надбавка * Таблица.Сумма) КАК ЧИСЛО(25,10))/ ВЫРАЗИТЬ(ТаблицаИтоговая.Сумма КАК ЧИСЛО(25,10)) |
|||
|
23
Толич
19.02.26
✎
15:31
|
(16) Цитирую автора: получается слишком грубое округление (даже без использования округлений). Итоговый результат гуляет на 6-8%
Кажется мне это не классическая проблема округление при распределении. 6-8%? Вы серьезно? |
|||
|
24
Asphalt
19.02.26
✎
15:35
|
Ну вот упрощенный запрос:
Выбрать Бонусы.ПериодНачисления, Бонусы.Менеджер, Бонусы.СуммаБонуса Поместить Бонусы ИЗ РегистрСведений.Бонусы КАК Бонусы Где Бонусы.ПериодНачисления = &ПериодНачисления ; Выбрать Надбавки.ПериодНачисления, Надбавки.СуммаНадбавки Поместить Надбавки ИЗ РегистрСведений.Надбавки КАК Надбавки Где Надбавки.ПериодНачисления = &ПериодНачисления ; Выбрать Бонусы.ПериодНачисления, Сумма(Бонусы.СуммаБонуса) КАК СуммаБонуса Поместить БонусыИтоговые ИЗ Бонусы КАК Бонусы Сгруппировать По ПериодНачисления ; Выбрать Бонусы.ПериодНачисления, Бонусы.Менеджер, Бонусы.СуммаБонуса, Надбавки.СуммаНадбавки * Бонусы.СуммаБонуса / БонусыИтоговые.СуммаБонуса КАК НадбавкаПоМенеджеру ИЗ Бонусы КАК Бонусы ВнутреннееСоединение Надбавки КАК Надбавки ПО Бонусы.ПериодНачисления = Надбавки.ПериодНачисления ВнутреннееСоединение БонусыИтоговые КАК БонусыИтоговые ПО Бонусы.ПериодНачисления = БонусыИтоговые.ПериодНачисления |
|||
|
25
Garykom
гуру
19.02.26
✎
15:38
|
(24) Можно вопрос?
Зачем считать это запросами? У вас там десятки и сотни тысяч сотрудников-менеджеров по которым надо бонусы считать? Почему тупо не считать это обычным кодом, на обычном языке программирования 1С? В банальном цикле по ТЗ! |
|||
|
26
Asphalt
19.02.26
✎
15:38
|
(14) Да, умножение на 1000000 ничего не добавляет к точности
(16) Ладно бы не сходилась, хотелось бы просто поточнее. |
|||
|
27
unenu
19.02.26
✎
15:40
|
(24) "приведите" делимое и делитель к одному типу операндов как в (22)
|
|||
|
28
unenu
19.02.26
✎
15:39
|
(25) возможно там у них рлс
|
|||
|
29
Garykom
гуру
19.02.26
✎
15:40
|
(28) Выбрать по кому считать и суммы можно с РЛС
Поместить в ТЗ И далее циклом |
|||
|
30
Asphalt
19.02.26
✎
15:41
|
(25) Несколько сотен наберётся.
Типа функцию из СКД вызвать предлагаете, а там считать? |
|||
|
31
Asphalt
19.02.26
✎
15:46
|
(27) Не повлияло
|
|||
|
32
Garykom
гуру
19.02.26
✎
15:48
|
(30) Нет
Нафуй там СКД? Для чего??? Если очень хочется отборы - ну так сваял ТЗ готовую (запросами и кодом) и передал в СКД как источник (для показа) |
|||
|
33
АгентБезопасной Нацио
19.02.26
✎
15:47
|
(24) И где "умножение на мильён"?
И что, кстати, "не сходится на 6-8%"? |
|||
|
34
PR
19.02.26
✎
15:49
|
(33) Кстати, вроде бы в СКД можно в явном виде написать ВЫРАЗИТЬ с нужной точностью и тогда все посчитается не 6 или сколько там знаков в SQL, а сколько укажешь
|
|||
|
35
Asphalt
19.02.26
✎
16:00
|
(33) Добавьте
Бонусы.СуммаБонуса / БонусыИтоговые.СуммаБонуса КАК Пропорция в последний запрос Значения пропорций будут такими же, что и (Бонусы.СуммаБонуса * 10000000) / БонусыИтоговые.СуммаБонуса только со смещением запятой. В сумме где-то 0.94 или даже хуже выходит, вместо 1. Соответственно и сумма всех надбавок настолько же отличается от эталонной надбавки. |
|||
|
36
Гена
гуру
19.02.26
✎
16:09
|
ВЫРАЗИТЬ(Надбавки.СуммаНадбавки * Бонусы.СуммаБонуса / БонусыИтоговые.СуммаБонуса КАК ЧИСЛО(25, 10)) КАК НадбавкаПоМенеджеру |
|||
|
37
unenu
19.02.26
✎
16:10
|
||||
|
38
Asphalt
19.02.26
✎
16:09
|
(36) Так ведь ещё больше ошибка округления будет?
|
|||
|
39
PR
19.02.26
✎
16:12
|
(38) Почему?
Как раз все хорошо будет |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |