Цитата:
Если ввожу 232 month 1. 0 - 155 1 - 117. Правильно Если ввожу 232 month 2. 0 - 75 1 - 75 2 - 82.00 Правильно Если ввожу 232 month 3. 0 - 55 1 - 55 2 - 55 3 - 67.00 Правильно Если ввожу 232 month 4. 0 - 45 1 - 45 2 - 45 3 - 45 4 - 52.00 Правильно Если ввожу 232 month 5. 0 - 35 1 - 35 2 - 35 3 - 35 4 - 35 5 - 57.00 Правильно Если ввожу 232 month 6. 0 - 95 1 - 42.00 Неправильно, не хватает 95. Если число больше 245 то всё правильно везде считает. <select class="select-month" name="month"> <option value="2">1</option> <option value="3">2</option> <option value="4">3</option> <option value="5">4</option> <option value="6">5</option> <option value="7">6</option> </select> |
KEMPZOR,
Цитата:
Сумма :<input id="sum" type = "text" value = "232"><br> <input type="button" value="Считать" onclick = "calc();"><br> <div id = "result"></div> <script> function calc() { var summa = +sum.value, period = 6; // if(summa < 35 || Math.floor(summa / 5) * 5 != summa) { // alert("Сумма должна быть кратной 5, не меньше 35"); // result.innerHTML = ""; // return; // } var tempPay, currentPay, lastPay; tempPay = summa / period; currentPay = Math.floor(tempPay / 5) * 5; if (currentPay < 35) currentPay = 35; period = Math.round(summa / currentPay); currentPay = currentPay + 5; do { currentPay = currentPay - 5; lastPay = summa - currentPay * period; } while ( lastPay < 35 && lastPay != 0); if (currentPay < 35) { currentPay = 30; do { currentPay = currentPay + 5; period = Math.floor(summa / currentPay); lastPay = summa - currentPay * period; } while (lastPay != 0 && lastPay < 35); } result.innerHTML = ""; for (var i = 0; i < period; i++) { result.innerHTML += i + " - " + currentPay + "<br>"; } result.innerHTML += i + " - " + lastPay + "<br>"; } </script> |
Цитата:
<select class="select-month" name="month"> <option value="2">1</option> <option value="3">2</option> <option value="4">3</option> <option value="5">4</option> <option value="6">5</option> <option value="7">6</option> </select> 0 - 160 1 - 160 2 - 160 3 - 160 4 - 160 5 - 160 6 - 40 Это правильно. Я сделал по своему примеру, у меня так показывает. 1000/7=142.85 Ближайшее 140 * 6 = 840 1000-840 = 160 0 - 140 1 - 140 2 - 140 3 - 140 4 - 140 5 - 140 6 - 160.00 Но вот меньше 244 некорректно.:cray: |
Цитата:
Сумма :<input id="sum" type = "text" value = "1000"><br> Период:<select class="select-month" name="month"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> </select> <input type="button" value="Считать" onclick = "calc();"><br> <div id = "result"></div> <script> function calc() { var summa = +sum.value, period = parseInt(document.querySelector("select[name=month]").value); // if(summa < 35 || Math.floor(summa / 5) * 5 != summa) { // alert("Сумма должна быть кратной 5, не меньше 35"); // result.innerHTML = ""; // return; // } var tempPay, currentPay, lastPay; tempPay = summa / period; currentPay = Math.floor(tempPay / 5) * 5; if (currentPay < 35) currentPay = 35; period = Math.round(summa / currentPay); currentPay = currentPay + 5; do { currentPay = currentPay - 5; lastPay = summa - currentPay * period; } while ( lastPay < 35 && lastPay != 0); if (currentPay < 35) { currentPay = 30; do { currentPay = currentPay + 5; period = Math.floor(summa / currentPay); lastPay = summa - currentPay * period; } while (lastPay != 0 && lastPay < 35); } result.innerHTML = ""; for (var i = 0; i < period; i++) { result.innerHTML += i + " - " + currentPay + "<br>"; } result.innerHTML += i + " - " + lastPay + "<br>"; } </script> |
Цитата:
1000 - сумма. 6 - Период. 0 - это первое число. Всего 7 значений, в <option value="7">6</option> я ставлю 7. Далее do { currentPay = currentPay - 5; lastPay = summa - currentPay * (period - 1); } while ( lastPay < 35 && lastPay != 0); и for (var i = 0; i < period-1; i++) { result.innerHTML += i + " - " + currentPay + "<br>"; } Вместо period ставлю (period-1), тогда всё считает как надо, только всё что меньше или равно 244 неправильно. 0 - 140 1 - 140 2 - 140 3 - 140 4 - 140 5 - 140 6 - 160 А и ещё убираю period = Math.round(summa / currentPay); |
KEMPZOR,
Вы нарушаете последовательность - вместо 0,1,2... вы делаете 0,2,3... и отсюда проистекает бред и ошибки |
Цитата:
0 - 140 1 - 140 2 - 140 3 - 140 4 - 140 5 - 140 6 - 160 |
KEMPZOR,
А чем вам не нравится мой вариант пост 24? Зачем вы его портите? |
Цитата:
|
KEMPZOR,
Цитата:
Цитата:
Попробуйте мой вариант по любым суммам не меньше 35 и по любым периодам - есть хоть один вариант, в котором что-то не так? Мой пример работает по следующим правилам: 1. Сумма должна закрываться за время, не большее указанного периода. Первая часть - сразу же, остальные - каждый месяц. 2. Части не должны быть меньше 35. 3. Все части одинаковые и кратные 5, за исключением последней, которая закрывает остаток суммы. |
Часовой пояс GMT +3, время: 12:00. |