Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Отображение процента от суммы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Как вывести формулу расчёта процента от суммы?
Stas11
Отправлено: 09 Мая, 2011 - 23:59:09
Post Id


Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Здравствуйте гуру и форумчане, возник такой вопрос и никак не могу найти решение этого вопроса.
Суть в следующем, у меня в админке выводится сумма оборота по продажам за выбранный период, и отображается как полная сумма оборота, так и чистая сумма.
Например было офомлено 2 заказа на сумму 1000 руб,. 1 заказ с курьерской доставкой на 100 руб и 1 заказ по почте со стоимостью пересылки 200 руб.
Отображение общей суммы стоит 2300 руб, а чистая сумма 2100 руб, так как сумма пересылки не учитывается.
Но мне нужно сделать отображение ещё одной строки которая будет отображать 30% заработка от чистой суммы, то есть по примеру двух заказов выше, сумма заработка должна составить 630 руб.

Общая сумма 2300 руб.
Чистая сумма 2100 руб.
Заработок 630 руб.

Но вот как написать код формулы которая будет расчитывать эти 30% я никак не могу нигде найти Недовольство, огорчение Подскажите пожалуйста как это реализовать?
Вот код запроса к таблице для отображения общей суммы:

PHP:
скопировать код в буфер обмена
  1. $q = db_query("select order_amount, currency_value from ".ORDERS_TABLE." where statusID > 1 and order_time>='".$start." 00:00:00' AND order_time<='".$end." 23:59:59'");
  2.                 $revenue = 0;
  3.                 while($r = db_fetch_row($q))
  4.                 {
  5.                         $revenue += $r[0];
  6.                 }
  7.                 $total["revenue"] = show_price( $revenue, CONF_DEFAULT_CURRENCY );


А этот код запроса отвечает за отображение чистой суммы:

PHP:
скопировать код в буфер обмена
  1. $q = db_query("select order_amount, currency_value, shipping_type, shipping_cost from ".ORDERS_TABLE." where statusID > 1 and order_time>='".$start." 00:00:00' AND order_time<='".$end." 23:59:59'");
  2.                 $revenue_clear = 0;
  3.                 while($r = db_fetch_row($q))
  4.                 {
  5.                         $revenue_clear += $r[0];
  6.             if($r['shipping_type']!='Курьер в пределах метро')
  7.                         $revenue_clear -= $r['shipping_cost'];
  8.                 }
  9. $total["revenue_clear"] = show_price( $revenue_clear, CONF_DEFAULT_CURRENCY );



Подскажите пожалуйста, что нужно написать чтоб формула расчитывала и выводила сумму в 30% от чистой суммы?
Заранее благодарен всем откликнувшимся помочь в решении этого вопроса.



(Добавление)
Опа! а немного подумав и сам нашол решение Улыбка Всё гениальное просто ;)
Просто добавить параметр /100*30
PHP:
скопировать код в буфер обмена
  1. $total["revenue_clear"] = show_price( $revenue_clear/100*30, CONF_DEFAULT_CURRENCY );

И всё работает Улыбка
Вопрос закрыт, в любом случае спасибо за помощь которую вы бы мне оказали.

(Отредактировано автором: 10 Мая, 2011 - 00:54:39)

 
 Top
Uchkuma
Отправлено: 10 Мая, 2011 - 11:15:23
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Это же 4-й или 5-й класс. Сколько вам лет?
 
 Top
movEAX
Отправлено: 10 Мая, 2011 - 12:40:51
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




Uchkuma пишет:
Это же 4-й или 5-й класс. Сколько вам лет?

оффтоп: где надпись "Адвокааат"? Улыбка


-----
армия.. самое убогое место
 
 Top
Stas11
Отправлено: 10 Мая, 2011 - 18:18:40
Post Id


Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Uchkuma Как математичесое решение я-то знаю, а вот как написать на языке программирования эту формулу и в каком месте кода вставить, это уже другой вопрос Улыбка
Но тем не менее разобрался сам.
Зато возник другой вопрос, как можно составить код, чтобы при этом сам код был покомпактнее если учесть что все 3 запроса для сбора инфы идут с одинаковыми параметрами, разница лишь в формуле расчёта и названии переменных.

Вот первый запрос на вывод полной суммы за выбранный период:

PHP:
скопировать код в буфер обмена
  1. $q = db_query("select order_amount, currency_value, shipping_type, shipping_cost from ".ORDERS_TABLE." where statusID > 1 and order_time>='".$start." 00:00:00' AND order_time<='".$end." 23:59:59'");
  2.                 $revenue_clear = 0;
  3.                 while($r = db_fetch_row($q))
  4.                 {
  5.                         $revenue_clear += $r[0];
  6.             if($r['shipping_type']!='Курьер в пределах метро')
  7.                         $revenue_clear -= $r['shipping_cost'];
  8.                 }
  9. $total["revenue_clear"] = show_price( $revenue_clear, CONF_DEFAULT_CURRENCY );


Далее идёт по тому же запросу из той же самой суммы вычисление 30%

PHP:
скопировать код в буфер обмена
  1. $q = db_query("select order_amount, currency_value, shipping_type, shipping_cost from ".ORDERS_TABLE." where statusID > 1 and order_time>='".$start." 00:00:00' AND order_time<='".$end." 23:59:59'");
  2.                 $revenue_clearpercent = 0;
  3.                 while($r = db_fetch_row($q))
  4.                 {
  5.                         $revenue_clearpercent += $r[0];
  6.             if($r['shipping_type']!='Курьер в пределах метро')
  7.                         $revenue_clearpercent -= $r['shipping_cost'];
  8.                 }
  9. $total["revenue_clearpercent"] = show_price( $revenue_clearpercent/100*30, CONF_DEFAULT_CURRENCY );


И третье отображение суммы это 30% от той же суммы поделённое на 2

PHP:
скопировать код в буфер обмена
  1. $q = db_query("select order_amount, currency_value, shipping_type, shipping_cost from ".ORDERS_TABLE." where statusID > 1 and order_time>='".$start." 00:00:00' AND order_time<='".$end." 23:59:59'");
  2.                 $revenue_percent2 = 0;
  3.                 while($r = db_fetch_row($q))
  4.                 {
  5.                         $revenue_percent2 += $r[0];
  6.             if($r['shipping_type']!='Курьер в пределах метро')
  7.                         $revenue_percent2 -= $r['shipping_cost'];
  8.                 }
  9. $total["revenue_percent2"] = show_price( $revenue_percent2/100*30/2, CONF_DEFAULT_CURRENCY );


То есть во всех трёх частях кода запрос к базе на выборку прописан одинаковый, разница лишь в названии переменных $revenue_clear, $revenue_clearpercent и $revenue_percent2

Пробовал сократить код выполнив такое написание:

PHP:
скопировать код в буфер обмена
  1. $q = db_query("select order_amount, currency_value, shipping_type, shipping_cost from ".ORDERS_TABLE." where statusID > 1 and order_time>='".$start." 00:00:00' AND order_time<='".$end." 23:59:59'");
  2.                 $revenue_clear = 0;
  3.                 $revenue_clearpercent = 0;
  4.                 while($r = db_fetch_row($q))
  5.                 {
  6.                         $revenue_clear += $r[0];
  7.                         $revenue_clearpercent += $r[0];
  8.             if($r['shipping_type']!='Курьер в пределах метро')
  9.                         $revenue_clear -= $r['shipping_cost'];
  10.                         $revenue_clearpercent -= $r['shipping_cost'];
  11. }
  12. $total["revenue_clear"] = show_price( $revenue_clear, CONF_DEFAULT_CURRENCY );
  13. $total["revenue_clearpercent"] = show_price( $revenue_clearpercent/100*30, CONF_DEFAULT_CURRENCY );


При этом расчёт отображается не совсем верно, то есть если 3 части кода по отдельности, то цифры одни, если добавить все переменные в один код и использовать только один запрос к к БД, то цифры немного меньше становятся.
Как правильно составить код, чтобы было и компактно и всё работало?

Я прошу прощения если мои вопросы покажутся смешными и наивными, но я не программист и програмирование изучаю так сказать методом тыка и подсказкам более продвинутых гуру в области программирования Улыбка
Пока буду ждать ответа, попробую и сам поковыряться, может методом тыка и перестановок кода удастся собрать конструктор с более компактным кодом и рабочим при этом Улыбка Ведь уверен что если запрос везде одинаковый
PHP:
скопировать код в буфер обмена
  1. $q = db_query("select order_amount, currency_value, shipping_type, shipping_cost from ".ORDERS_TABLE." where statusID > 1 and order_time>='".$start." 00:00:00' AND order_time<='".$end." 23:59:59'");
то как бы нет нужды повторять один и тот же код в трёх местах, можно как то обойтись одним запросом, но при этом заставить обработчик отображать нужные данные с каждой переменной.
Все когда то начинали с нуля и потихоньку достигли высот, я тоже когда начинал знал только <b> и всё, а щас уже ковыряюсь в php Улыбка и надеюсь с Вашей помощью узнать как оптимизировать данный код.

(Отредактировано автором: 10 Мая, 2011 - 18:30:55)

 
 Top
Uchkuma
Отправлено: 10 Мая, 2011 - 21:45:43
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




У вас под одно условие попадают несколько выражений. Кто будет заключать их в фигурные скобки?
 
 Top
Stas11
Отправлено: 10 Мая, 2011 - 23:04:05
Post Id


Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Uchkuma А поподробнее и желательно на примерах Улыбка
Я понимаю что надо разделить выражения, но не знаю как и в каком порядке и самое главное как его составить от и до.

(Отредактировано автором: 10 Мая, 2011 - 23:04:57)

 
 Top
OrmaJever Модератор
Отправлено: 10 Мая, 2011 - 23:33:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Stas11 пишет:
PHP:
скопировать код в буфер обмена
  1.             if($r['shipping_type']!='Курьер в пределах метро')
  2.                         $revenue_clear -= $r['shipping_cost'];
  3.                         $revenue_clearpercent -= $r['shipping_cost'];

Вот например. Судя по табуляциям под условие должно попасть 2 строки, а без фигурных скобок попадает только первая срока, а вторая выполнится даже если условие false.
Для этого нужно брать в фигурные скобки
PHP:
скопировать код в буфер обмена
  1.             if($r['shipping_type']!='Курьер в пределах метро') {
  2.                         $revenue_clear -= $r['shipping_cost'];
  3.                         $revenue_clearpercent -= $r['shipping_cost'];
  4.             }

(Отредактировано автором: 10 Мая, 2011 - 23:34:21)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Stas11
Отправлено: 11 Мая, 2011 - 19:37:24
Post Id


Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




OrmaJever Спасибо большое, помогло Улыбка какая то скобочка, а какую огромную роль играет Улыбка

В итоге полный код получился компактнее аж на 920 килобайт.

PHP:
скопировать код в буфер обмена
  1. $q = db_query("select order_amount, currency_value, shipping_type, shipping_cost from ".ORDERS_TABLE." where statusID > 1 and order_time>='".$start." 00:00:00' AND order_time<='".$end." 23:59:59'");
  2.         $revenue_clear = 0;
  3.         $revenue_clearpercent = 0;
  4.         $revenue_percent2 = 0;
  5.         $revenue_percent = 0;
  6.                 while($r = db_fetch_row($q))
  7.         {
  8.                         $revenue_clear += $r[0];
  9.             $revenue_clearpercent += $r[0];
  10.             $revenue_percent2 += $r[0];
  11.             $revenue_percent += $r[0];
  12.             if($r['shipping_type']!='Курьер в пределах метро')
  13.         {
  14.             $revenue_clear -= $r['shipping_cost'];
  15.             $revenue_clearpercent -= $r['shipping_cost'];
  16.             $revenue_percent2 -= $r['shipping_cost'];
  17.             $revenue_percent -= $r['shipping_cost'];
  18.         }
  19.         }
  20. $total["revenue_clear"] = show_price( $revenue_clear, CONF_DEFAULT_CURRENCY );
  21. $total["revenue_clearpercent"] = show_price( $revenue_clearpercent/100*30, CONF_DEFAULT_CURRENCY );
  22. $total["revenue_percent2"] = show_price( $revenue_percent2/100*30/2, CONF_DEFAULT_CURRENCY );
  23. $total["revenue_percent"] = show_price( $revenue_percent/100*30/2-7500, CONF_DEFAULT_CURRENCY );


Только вот по прежнему смущает наличие некоторых дубликатов, например

$revenue_clear = 0;
$revenue_clearpercent = 0;
$revenue_percent2 = 0;
$revenue_percent = 0;

и

$revenue_clear -= $r['shipping_cost'];
$revenue_clearpercent -= $r['shipping_cost'];
$revenue_percent2 -= $r['shipping_cost'];
$revenue_percent -= $r['shipping_cost'];

Где повторяются -= $r['shipping_cost']; и = 0;
Может быть есть способ объединить 4 строки одним условием, например так:

PHP:
скопировать код в буфер обмена
  1. $revenue_clear/$revenue_clearpercent/$revenue_percent2/$revenue_percent -= $r['shipping_cost'];


Или через запятую, точно не знаю какой разделитель поставить, или же тот полный код который я привёл выше является окончательным и по другому никак не получится уменьшить код без нарушения работоспособности?

Впринципи и так уже стало намного компактнее, но как говорится нет предела совершенству и хочется больше Улыбка
(Добавление)
Хотя уже сам понял что это самый простой код, проще только удалить строку Улыбка
Насколько я понял каждое условие должно иметь свой параметр, а чтобы было 4 условия с 1 параметром это только в сказке, интепритатор такого читать не умеет Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB