Калькулятор на JS + PHP

363
25 января 2017, 00:43

Доброго времени суток, я начинающий программист. Столкнулся с довольно обычной задачей, но из-за нехватки опыта не могу понять в каком направлении идти.

Мне нужно написать обычный js + php калькулятор для подсчета суммы заказа по коэффициентам.

Вот тут находится похожий калькулятор (как пример):

С фронтенд частью калькулятора и передачей двух числовых переменных ползунков "Мой рейтинг" и "Хочу рейтинг", через ajax в php обработчик - я разобрался.

Но с подсчетом итоговой суммы рублей в php обработчике, у меня возникли сложности.

Я написал формулу (для теста), по которой можно было бы посчитать переменные вручную, но как это воплотить с точки зрения логики php, я не знаю.

//Получили положение ползунков (для примера)
$current_mmr = 1000; //Мой рейтинг
$end_mmr = 5000; //Хочу рейтинг
//Находим расстояние между ползунками
$value = $end_mmr - $current_mmr;
$a = (2500 - $current_mmr) * 2;
$b = (3500 - 2500) * 2.5;
$c = (4500 - 3500) * 3.5;
$d = ($end_mmr - 4500) * 5.5;
$e = $a + $b + $c + $d;
//Получаем средний коэффициент
$f = $e / $value;
//Умножаем расстояние между ползунками на средний коэффициент
$result = $value * $f;
$html = "Итого: {$result}.руб";
echo json_encode(array('result' => 'success', 'html' => $html));

Сложность заключается в том, что у каждого числового диапазона свой коэффициент умножения:

0-2500 value=2
2500-3500 value=2.5
3500-4500 value=3.5
4500-5500 value=5.5

Вот логика по которой я писал алгоритм:

Дано:
1)"Дистанция" от 0 до 5500
    2)Коэффициенты умножения на "промежутках" дистанции:
        a) от 0 до 2500 * 2
        b) от 2500 до 3500 * 2.5
        c) от 3500 до 4500 * 3.5
        d) от 4500 до 5500 * 5.5
3) Две переменных: a, b (Наши ползунки "Текущий ММР" и "Конечный ММР")
4) const = a < b (Ползунок "Конечный ММР" всегда больше чем "Текущий ММР")
Например нам через ajax передались такие значения:
a = 1000 "Текущий ММР"
b = 5000 "Конечный ММР"
Найти:
Общую стоимость за каждую единицу "дистанции" от точки a до точки b, умноженную на коэффициенты по отношению к своим "промежуткам" на дистации.
Решение:
1)Найти промежуток дистации между a и b
b - a = 4000 (Промежуток между ползунками "Текущий ММР" и "Конечный ММР" - это ММР который нужно забустить)
2)
    a)2500 - 1000(это значение ползунка "Текущий ММР") * 2 = 3000 руб
    b)3500 - 2500 * 2.5 = 2500 руб
    c)4500 - 3500 * 3.5 = 3500 руб
    d)(это значение ползунка "Конечный ММР")5000 - 4500 * 5.5 = 2750 руб
    a + b + c + d = 11750 руб
    11750 / 4000 = ~ 2.9 (нашли средний коэффициент)
3)
Найдя средний коэффициент и нужную дистанцию, мы умножаем их и получаем сумму. Его я искал для того, что бы применить в логике PHP.

Буду рад любым советам и подсказкам, это не заказ, так-что спешить некуда, я учусь. Спасибо.

Answer 1

Без проверки на границы и валидацию на JS получиться :

https://jsfiddle.net/0ghrmo2t/2/

// Можно правила менять, как хочешь!
var limits = [
    {"lower": 0, "upper": 2499, "coef" : 2 },
    {"lower": 2500, "upper": 3499, "coef" : 2.5 },
    {"lower": 3500, "upper": 4499, "coef" : 3.5 },
    {"lower": 4500, "upper": 5500, "coef" : 5.5 }
];
function getCoef(cVal, nVal) {
    var diff = nVal - cVal;
    var tmp = 0;
    limits.forEach(function (val) {
        // вне диапазона, не считаем.
        if (cVal > val.upper || nVal < val.lower) {
           return;
        }
        // Сколько попало в диапазон.
        var l = Math.max (cVal, val.lower);
        var u = Math.min (nVal, val.upper);
        tmp += (u-l) * val.coef;
    });
    //console.log(tmp, tmp/diff);
    // Можно вернуть сумму.
    // return tmp;
    // или коэффициент
    return tmp/diff;
}
getCoef(2400, 3500);
getCoef(1000, 5000);
READ ALSO
Javascript. Работа с файлами и папками

Javascript. Работа с файлами и папками

Хочу попробовать написать простенький текстовый редактор на javascript html и css, в котором хотелось бы создавать новые файлы и папкиЕсть ли какие...

519
Можно ли упростить выражение?

Можно ли упростить выражение?

Условие должно проверять:

358
Перенос кода из Яндекс Карт в Гугл карты

Перенос кода из Яндекс Карт в Гугл карты

Собрал код для Яндекс карт, но понадобилось все перенести на Гугл картыКак это сделать грамотней не понимаю

485