Распределение чисел в процентном соотношении

Рейтинг: 1Ответов: 1Опубликовано: 19.04.2015

есть партнеры которые привлекают клиентов на сайт. на сайте есть учитываемый вид платежа(автоматический). и не учитываемый (ручной).

предположим что 4 партнера привлекли на сайт 150 клиентов в сумме. из них по учитываемому виду платежа партнеры привлекли 5, 8, 1, 0 клиентов соответственно.

т.е. получается что через учитываемый вид платежа было совершено 5+8+1=14 покупок.

задача в следующем. распределить все платежи на всех партнеров ориентируясь на учитываемый вид платежа.

например: всего 14 сделок. первый партнер сделал 5 учитываемых сделок. получается что 5 - это ~35,71% от 14. а 35,71% от 150 - это 53,57. т.е. округляя мы получим что первый партнер совершил 53 сделки.

сначала я сделал так:

# исходный массив
array (
  0 => 
  array (
    'count_pay' => '5',
  ),
  1 => 
  array (
    'count_pay' => '8',
  ),
  2 => 
  array (
    'count_pay' => '1',
  ),
  3 => 
  array (
    'count_pay' => 0,
  ),
)

$vsego = 150;
$sum_of_done = 14;
$rows = array();
foreach ($rows as $key => $value) {
    $value['raschet'] = floor($value['count_pay']*$vsego/$sum_of_done); // расчет и округление до целого
}

return $rows;

получается что каждый партнер сделал 53, 85, 10 и 0 сделок. в сумме = 148. остается 2 не распределенных. если использовать round для округления. то будет 151.

как сделать распределение всей сумы 150 на каждого из партнеров?

Ответы

▲ 1

А зачем вы перегоняете целые числа в проценты, а потом из процентов - обратно в целые числа? Держите данные в каком-то одном виде (на мой взгляд в виде сделок, но я, кажется, что-то упустил в целях задачи) максимально доступное время. И проблема решится сама собой.