Пропорциональное деление
Пропорциональное деление — деление какой-нибудь величины на части, прямо или обратно пропорциональные данным числам.
Чтобы разделить число на части пропорционально нескольким данным числам, надо разделить его на сумму этих чисел и частное умножить на каждое из них.
Деление числа на пропорциональные части
Пример 1. Разделить число 50 на части пропорционально числам 2 и 3.
Решение: Надо найти такие два слагаемых числа 50, которые будут относиться друг к другу так, как 2:3. Первое слагаемое должно содержать 2 части числа, а второе 3, значит, число 50 содержит 5 таких частей (2 + 3 = 5), следовательно, каждая такая часть будет равна:
Число 10 — одна часть. Теперь надо умножить эту часть на числа, пропорционально которым требовалось разделить число 50:
Ответ: 2:3 = 20:30.
Пример 2. Разделить число 90 на три слагаемых пропорционально числам 1, 2 и 3.
90 : (1 + 2 + 3) = 90 : 6 = 15;
Ответ: 1:2:3 = 15:30:45.
Длинные отношения вида 1:2:3 называются сложными. Сложные отношения — это условные записи, показывающие, сколько долей содержит каждая часть. Если члены сложного отношения дробные, то, приведя их к общему знаменателю и умножив на него, можно заменить отношение дробных чисел отношением целых.
Пример. Разделить число 66 на такие три части, чтобы первая относилась ко второй, как 3:2, а вторая к третьей, как 5:4.
Первый способ: обозначим искомые части буквами a, b и c. Так как отношение не изменится, если оба члена умножить на одно и то же число, то умножим члены первого отношения на 5, а второго на 2:
a:b = 3:2 = 15:10;
b:c = 5:4 = 10:8;
значит a:b:c = 15:10:8. Так как 15 + 10 + 8 = 33, то
a = (66 : 33) · 15 = 30;
b = (66 : 33) · 10 = 20;
c = (66 : 33) · 8 = 16.
Второй способ: обозначим искомые части буквами a, b и c:
a:b = 3:2;
b:c = 5:4.
Если первая часть a равна 3, вторая b равна 2, то третью часть c можно определить из пропорции:
Следовательно, c равно:
| c = | 2 · 4 | = | 8 | , |
| 5 | 5 |
| a:b:c = 3:2: | 8 | . |
| 5 |
Умножив все члены полученного сложного отношения на 5, чтобы избавиться от дробного члена, получим:
a:b:c = 15:10:8,
так как 15 + 10 + 8 = 33, то
a = (66 : 33) · 15 = 30;
b = (66 : 33) · 10 = 20;
c = (66 : 33) · 8 = 16.
Деление на части, обратно пропорциональные числам
Пример. Разделить число 62 на три части обратно пропорционально числам 2, 3 и 5, то есть разложить на три части, которые относились бы между собой, как
| 1 | : | 1 | : | 1 | . |
| 2 | 3 | 5 |
Решение: Обозначим искомые части буквами a, b и c. Приведём члены отношения к общему знаменателю и заменим дробные члены на целые числа:
| a:b:c = | 1 | : | 1 | : | 1 | = | 15 | : | 10 | : | 6 | = 15:10:6, |
| 2 | 3 | 5 | 30 | 30 | 30 |
так как 15 + 10 + 6 = 31, то
a = (62 : 31) · 15 = 30;
b = (62 : 31) · 10 = 20;
c = (62 : 31) · 6 = 12.
Как распределить сумму пропорционально
(3)Формулой это типа:
Ч1 = 150
Ч2 = 100
Ч3 = 50
Сумма = Ч2 / (Ч1 + Ч3)
Ч1 = Ч1 + Ч1 * Сумма
Ч3 = Ч3 + Ч3 * Сумма
Все понятно, всем спасибо.
(8) Чтобы не путаться в понятиях:
Коэффициент = Ч2 / (Ч1 + Ч3)
Ч1 = Ч1 + Ч1 * Коэффициент
Ч3 = Ч3 + Ч3 * Коэффициент
(8) А зачем так:
Ч1 = Ч1 + Ч1 * Коэффициент ?
Функция РассчитатьДельту(СуммаВходящая,ВсегоСуммаВходящая,СуммаРаспределения)
ПроцентОтОбщей=СуммаВходящая /(ВсегоСуммаВходящая/100);
Дельта=Окр(СуммаРаспределения/100*ПроцентОтОбщей,2,РежимОкругления.Окр15как20);
Возврат Дельта;
КонецФункции
+ потом если последняя сумма надо не функцию вызывать а тупо прибавлять оставшийся хвост. а то копейки остаются
мдэ. а что, в Советское время тоже образование хромало?
(12) хвост в виде лишней копейки, если коэффициент вида 0,3333333333333, лучше не к последней сумме прибавлять, а к максимальной. Аккуратнее получается. 🙂
(0) «программист»-гуманитарий?
(0) это шутка ?
(14)Можно и так 🙂
есть 2 (два) осажденных города.
в одном 150 защитников. в другом 50 защитников.
им на подмогу идет обоз с мукой.
везут 100 кг.
Задача: сколько муки нужно завезти в каждый город через подземный ход чтобы всем защитникам досталось поровну?
Решение:
Складываем всех защитников города, делим всю муку на кол-во всех защитников, находим сколько муки приходится на 1 защитника по норме.
Умножаем норму на кол-во защитников в каждом городе.
разделяем всю муку на 2 части ПРОПОРЦИОНАЛЬНО полученной норме для каждого города.
(14) В социальном государстве лучше прибавлять к минимальной сумме.
а теперь в запросе и так, чтобы копейки не терялись :)))
лично у меня — УГ получилось 🙂
(20)
declare t table (id int, b decimal)
declare @sum as decimal
insert t values (1, 100), (2, 50)
select
cast(@sum / (SUM(b) OVER()) * b as decimal(15,2)) AS t
from
t
Усложним задачу:
Есть главный документ.
Сумма документа = 150
Нал = 50
БезНал = 100
Он делится на 2 документа.
Первый Документ
Сумма = 80
Нал = ?
БезНал = ?
Второй Документ
Сумма = 70
Нал = ?
БезНал = ?
Вот как тут рассчитать оплату из главного документа ?
(22) распредели сумму в 100 пропорционально между 3 одинаковимы значениями, чтобы копейки не потерялись
*одинаковыми
типа
100 + 100 + 100 + 100 => 133,34 + 133,33 + 133,33
(14) В исходной задаче две суммы. В случае, если у одной суммы будет 0,3333333333333 — значит у другой 0,6666666666666. В общем, при округлении все будет хорошо. Вот если было три суммы (и более). Возникла бы ситуёвина, когда одному 0,3333333333333, другому 0,3333333333333 и третьему столько же. В результате копеечки могут и не бить.
(27) решение таки должно быть универсальным
(0) размазывать нужно как в (6) но с одной оговоркой
отсортировать суммы по убыванию и последней сумме добавить остаток
Суть этого гемора такова:
Определенный товар продается на ИП, остальной на ООО (одна касса работает с двумя фискальниками), до того пока не подключили банк все было нормально, вчера подключили.
т.е.
Один Чек ККМ делится на два в зависимости от товара.
Для Каждого Строка Из ТЗ Цикл
Результат = НужныйРезультат * Строка.Основание / База + Отклонение;
Отклонение = (Результат — Окр(Результат, 2));
Строка.Результат = Окр(Результат, 2);
КонецЦикла;
Это 1с розница, программно деление чека выглядит так:
Если Константы.ДваФР.Получить() Тогда
Запрос = Новый Запрос(»
|ВЫБРАТЬ * ПОМЕСТИТЬ ТабТов ИЗ &ТабТов КАК ТТ;
|ВЫБРАТЬ *
|ИЗ
| ТабТов КАК Товары
|ГДЕ
| Товары.Номенклатура.ТоварОрганизации = &Организация»);
Запрос.УстановитьПараметр(«ТабТов», Товары.Выгрузить());
ВремКассаККМ = КассаККМ;
Оплаты = Оплата.Выгрузить();
Организации = Справочники.Организации.Выбрать();
Пока Организации.Следующий() Цикл
Если Организации.Ссылка = Магазин.ОсновнойСклад.Организация Тогда;
Организация = Справочники.Организации.ПустаяСсылка();
Иначе
Организация = Организации.Ссылка;
КонецЕсли;
Запрос.УстановитьПараметр(«Организация», Организация);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
ЭтотОбъект.Товары.Загрузить(Результат.Выгрузить());
ФР = ПолучитьСерверТО().ПолучитьИдентификаторПоИдКассы(Организация);
Если ЗначениеЗаполнено(Организация) И Не ПустаяСтрока(ФР) Тогда
КассаККМ = ПолучитьСерверТО().ПолучитьКассуККМ(ФР);
Иначе
КассаККМ = ВремКассаККМ;
КонецЕсли;
ИтогСуммы = Товары.Итог(«Сумма»);
ИтогОплат = Оплаты.Итог(«Сумма»);
Если ИтогСуммы <> ИтогОплат Тогда
ЭтотОбъект.Оплата.Загрузить(Оплаты);
Для Каждого ФормаОплат Из Оплата Цикл
КонецЦикла;
КонецЕсли;
ЗавершитьЗакрытиеЧека2(Печать, РучнойРежим, ВыбратьДокументПечати, ФР);
КонецЕсли;
КонецЦикла;
Иначе
ЗавершитьЗакрытиеЧека2(Печать, РучнойРежим, ВыбратьДокументПечати);
КонецЕсли;
(32) запросом же
(34)Если использовать временные таблицы, то можно распределить результат, а остаток оставить на максимальной/минимальной строке
Получилось как то так:
.
Для Каждого ФормаОплат Из Оплата Цикл
Если ПервыйПроход Тогда
СуммаОплаты = ИтогСуммы * Окр(ФормаОплат.Сумма / ИтогОплат, 2);
СписокОплат.Добавить(ФормаОплат.Сумма — СуммаОплаты);
ФормаОплат.Сумма = СуммаОплаты;
Иначе
ФормаОплат.Сумма = СписокОплат.Получить(ФормаОплат.НомерСтроки — 1).Значение;
КонецЕсли;
КонецЦикла;
ПервыйПроход = 0;
.
(36) В УТ или УПП глянь документ доп. расходы. Там есть алгоритм распределения суммы по кол-ву или объему
Excel пропорциональное распределение суммы одной ячейки на диапозон
Подскажите формулу, как сумму доставки пропорционально сумме каждого товара раскидать
Дополнен 4 года назад
Сумму округлить
Голосование за лучший ответ
Меняется соответственно только B и C
C2 = B2*F3/B12
123Ученик (248) 4 года назад
спасибо, как округлить до целых. ? у меня получилось вместо 520 — 501
InviZzzible Мудрец (10750) Так просто можете ячейку отформатировать
Полосатый жираф АликИскусственный Интеллект (312848) 4 года назад
Так и написал бы ПРАВИЛЬНУЮ формулу!
Понятно, что в C2 написать:
=B2*F$3/B$12
И копировать это вниз.
А что там про округление? Можно внятно написать?!
Похожие вопросы
Ваш браузер устарел
Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.
Как пропорционально распределить сумму

Функция пропорционально распределяет сумму на необходимое количество.
Функция РаспределитьПропорционально(Знач ИсхСумма, Количество, Знач Точность = 2) МассивСумм = Новый Массив; Сумма = Окр(ИсхСумма/Количество, Точность); ИтоговаяСумма = 0; Для СЧ = 1 По Количество-1 Цикл МассивСумм.Добавить(Сумма); ИтоговаяСумма = ИтоговаяСумма + Сумма; КонецЦикла; МассивСумм.Добавить(ИсхСумма - ИтоговаяСумма); Возврат МассивСумм; КонецФункции
