|
Можно ли посчитать пропорцию в запросе с большей точностью? DiMel_77, Eiffil123, Доминошник, Михаил Козлов, 1cVandal, Irbis, wolk, Hmster, nick86, reg0303, Garykom, mTema32, JohnGilbert, who respawn, arsik, Хряк, Fish, Asphalt, Гена, AlexKimp, Группа неравнодушных, Михаил_, trad, Fedor-1971, Ненавижу 1С, Timon1405, yesenin, unenu, toypaul, АгентБезопаснойНацио, Chameleon1980, maxab72, qwerty, PR, Бычье сердце, serpentt, VladZ, DeeK, Ёпрст, evgeniy_n, Гипервизор, mortal, ads55, ryutao, rozer76, Vstur, Толич, Philix, RVN, vicof, integer, kauksi, shuhard, sikuda, paramedic, alexxx961503, Мультук, Злопчинский, 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) Почему?
Как раз все хорошо будет |
|||
|
40
Timon1405
19.02.26
✎
16:20
|
ВЫБРАТЬ
"А" КАК Назначение, 100 КАК Сумма ПОМЕСТИТЬ Т ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Б", 200 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "В", 300 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Г", 400 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Д", 500 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Е", 600 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(Т.Сумма) КАК Сумма ПОМЕСТИТЬ Т_Итог ИЗ Т КАК Т ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Т.Назначение КАК Назначение, Т.Сумма КАК Сумма, ВЫРАЗИТЬ(Т.Сумма / Т_Итог.Сумма - 0.004999999 КАК ЧИСЛО(15, 2)) КАК Процент, Т.Сумма / Т_Итог.Сумма - (ВЫРАЗИТЬ(Т.Сумма / Т_Итог.Сумма - 0.004999999 КАК ЧИСЛО(15, 2))) КАК ДельтаПроцент ПОМЕСТИТЬ ТТ ИЗ Т КАК Т, Т_Итог КАК Т_Итог ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(ТТ.ДельтаПроцент) КАК ДельтаПроцент, СУММА(ТТ.Сумма) КАК Сумма ПОМЕСТИТЬ Т_Дельта ИЗ ТТ КАК ТТ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТТ.Назначение КАК Назначение, ТТ.Сумма КАК Сумма, ТТ.Процент КАК Процент, ТТ.ДельтаПроцент КАК ДельтаПроцент, ВЫРАЗИТЬ(ТТ.Процент + Т_Дельта.ДельтаПроцент * ТТ.Сумма / Т_Дельта.Сумма КАК ЧИСЛО(15, 2)) КАК ПроцентИтог ИЗ ТТ КАК ТТ ЛЕВОЕ СОЕДИНЕНИЕ Т_Дельта КАК Т_Дельта ПО (ИСТИНА) *видел в запросе появились новомодные ОКР и ЦЕЛ, но я по-старинке доверяю 0.004999999 |
|||
|
41
Asphalt
19.02.26
✎
16:33
|
Похоже действительно какие-то проблемы с конкретной базой. На другой распределение прям в разы точней получается.
|
|||
|
42
Ненавижу 1С
гуру
19.02.26
✎
16:43
|
(36) Только выразить надо не результат, а составные части
|
|||
|
43
Гена
гуру
19.02.26
✎
16:45
|
(42) Э... ну может быть... практика критерий истины.
|
|||
|
44
arsik
гуру
19.02.26
✎
16:57
|
Все не читал, но можно попробовать
Значение*0.0000000000001/0.0000000000001 |
|||
|
45
Eiffil123
19.02.26
✎
16:58
|
к чему нужна абсолютная точность, не влияющая на общий результат? Эти копейки на уровне погрешности округления.
даже в математических операциях вычитания в экселе есть погрешность. 1,324 - 1,319 не равно 0,005 |
|||
|
46
1cVandal
19.02.26
✎
17:20
|
Можно, а зачем? )
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |