Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите оптимизировать функцию
 
 автор: pavluxa09   (11.04.2010 в 19:27)   письмо автору
 
 

Здравствуйте. Пожалуйста, помогите оптимизировать функцию. Её смысл заключается в следующем: она получает прямой и обратный курсы, сумму обмена, комиссию платежной системы и исходя из этого высчитывает прибыль. Прибыль высчитывается по такой формуле: разность между курсами умноженая на сумму и минус комиссия которую оплатили при отправке денег.
Следует учесть, что если сумма которую отправили меньше или равна еденице, то комиссия составляет 0.01. Дело в том что направления разные и ещё пришлось IF делать, но я уверен что можно и без него математически посчитать.
Когдато встречал уже готовую формулу которая высчитывает это, но некак немогу её найти. Пожалуйста, помогите на основе этого кода сделать единую формулу. Заранее спасибо.
Обратите внимание, что функция должна принимать параметр типа bool который означает показывать в валюте которую дают или которую получают.

function calculate_income( $direct_course,$reverse_course,$amount,$commission=0.8 )
{
    # Ф У Н К Ц И Я  Д Л Я  П О Д С Ч Е Т А  П Р И Б Ы Л И  С  О Б М Е Н А
    # Принимает следующие аргументы: прямой курс, обратный курс, сумма обмена, [комиссия платежной системы].
    # Возвращает: прибыль с обмена.

    if( $direct_course<1 )
    {
        return (($reverse_course-(1/$direct_course))/2*$amount)-((1/$direct_course)*$amount*$commission/100);
    }
    else
    {
        return ((((($direct_course-(1/$reverse_course))/2)/$direct_course)*$amount)/$direct_course)-($amount/$direct_course*$commission/100);
    }
}


Пример расчетов:
К примеру меняем доллары на рубли по курсу 1 WMZ = 30 WMR, а обратный курс 31 WMR = 1 WMZ. Меняют сумму в размере 10 WMZ.
Получаем данные:
Прямой курс: 1/30 = 0.03333
Обратный курс: 31/1 = 31
Сумма: 10

Прибыль на еденице обмена = (31-30)/2 = 0.5 WMR.
Прибыль с учетом суммы обмена = 0.5*10 = 5 WMR.
Комиссия = 10*30*0,008 = 300*0,008 = 2.4 WMR.
Общая прибыль = 5 - 2.4 = 2.6 WMR.
Обратите внимание, что прибыль выражена в валюте которую получают. Чтоб выразить в валюте которую дают нужно 2.6/30 = 0.0866666667 WMZ.

Если производить по этойже формуле обмен обратный то числа уже далеко не те.

  Ответить  
 
 автор: pavluxa09   (11.04.2010 в 19:50)   письмо автору
 
   для: pavluxa09   (11.04.2010 в 19:27)
 

Попытался воплотить вторую идею вроде как счетает, но правильно или нет не знаю.

function calculate_income( $direct_course,$reverse_course,$amount,$commission=0.8,$showgot=true )
{
    # Ф У Н К Ц И Я  Д Л Я  П О Д С Ч Е Т А  П Р И Б Ы Л И  С  О Б М Е Н А
    # Принимает следующие аргументы: прямой курс, обратный курс, сумма обмена, [комиссия платежной системы], [показать в валюте на которую получают].
    # Возвращает: прибыль с обмена.

    if( $direct_course<1 )
    {
        $income = (($reverse_course-(1/$direct_course))/2*$amount)-((1/$direct_course)*$amount*$commission/100);
    }
    else
    {
        $income = ((((($direct_course-(1/$reverse_course))/2)/$direct_course)*$amount)/$direct_course)-($amount/$direct_course*$commission/100);
    }
    return ($showgot==true ? $income : $income/$reverse_course);
}

  Ответить  
 
 автор: Trianon   (11.04.2010 в 22:10)   письмо автору
 
   для: pavluxa09   (11.04.2010 в 19:27)
 

совсем необязательно формулу пытаться записать именно в одну строку.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования