Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 27.04.2017, 17:33
Аспирант
Отправить личное сообщение для KEMPZOR Посмотреть профиль Найти все сообщения от KEMPZOR
 
Регистрация: 13.12.2016
Сообщений: 85

Сообщение от Dilettante_Pro Посмотреть сообщение
KEMPZOR,

100 неправильно считается?
0 - 50
1 - 50
2 - 0 - это неправильно?
Еще какие неправильно?
Если так то правильно.
Если ввожу 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, 27.04.2017 в 17:38.
Ответить с цитированием
  #22 (permalink)  
Старый 27.04.2017, 17:40
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

KEMPZOR,
Сообщение от KEMPZOR
Если ввожу 232 month 6.
0 - 95
1 - 42.00
Неправильно, не хватает 95.
Откуда у вас такие цифры?

Сумма :<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>
Ответить с цитированием
  #23 (permalink)  
Старый 27.04.2017, 18:04
Аспирант
Отправить личное сообщение для KEMPZOR Посмотреть профиль Найти все сообщения от KEMPZOR
 
Регистрация: 13.12.2016
Сообщений: 85

Сообщение от Dilettante_Pro Посмотреть сообщение
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 количества месяцев, пост №19.
<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 некорректно.
Ответить с цитированием
  #24 (permalink)  
Старый 27.04.2017, 18:47
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от KEMPZOR
Я сделал по своему примеру, у меня так показывает.
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 некорректно
Что за бред?

Сумма :<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>
Ответить с цитированием
  #25 (permalink)  
Старый 27.04.2017, 20:18
Аспирант
Отправить личное сообщение для KEMPZOR Посмотреть профиль Найти все сообщения от KEMPZOR
 
Регистрация: 13.12.2016
Сообщений: 85

Сообщение от Dilettante_Pro
Что за бред?
Ну смотри как я получаю это число.
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, 27.04.2017 в 20:21.
Ответить с цитированием
  #26 (permalink)  
Старый 27.04.2017, 22:02
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

KEMPZOR,
Вы нарушаете последовательность - вместо 0,1,2... вы делаете 0,2,3... и отсюда проистекает бред и ошибки
Ответить с цитированием
  #27 (permalink)  
Старый 27.04.2017, 23:15
Аспирант
Отправить личное сообщение для KEMPZOR Посмотреть профиль Найти все сообщения от KEMPZOR
 
Регистрация: 13.12.2016
Сообщений: 85

Сообщение от Dilettante_Pro Посмотреть сообщение
KEMPZOR,
Вы нарушаете последовательность - вместо 0,1,2... вы делаете 0,2,3... и отсюда проистекает бред и ошибки
Ну а как тогда не нарушая последовательность получить с 1000, у меня по другому не выходит, подскажите пожалуйста

0 - 140
1 - 140
2 - 140
3 - 140
4 - 140
5 - 140
6 - 160
Ответить с цитированием
  #28 (permalink)  
Старый 28.04.2017, 08:23
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

KEMPZOR,
А чем вам не нравится мой вариант пост 24? Зачем вы его портите?
Ответить с цитированием
  #29 (permalink)  
Старый 28.04.2017, 08:42
Аспирант
Отправить личное сообщение для KEMPZOR Посмотреть профиль Найти все сообщения от KEMPZOR
 
Регистрация: 13.12.2016
Сообщений: 85

Сообщение от Dilettante_Pro Посмотреть сообщение
KEMPZOR,
А чем вам не нравится мой вариант пост 24? Зачем вы его портите?
Мне ваш вариант нравиться, просто приходится подстраиваться под потребности руководства, мой пример считает правильно , решить вопрос с подсчётом меньше 244, всё будет классно.
Ответить с цитированием
  #30 (permalink)  
Старый 28.04.2017, 11:02
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

KEMPZOR,
Сообщение от KEMPZOR
приходится подстраиваться под потребности руководства
Интересно, что это за потребности, которым мой вариант не соответствует?
Сообщение от KEMPZOR
мой пример считает правильно , решить вопрос с подсчётом меньше 244,
Это как раз говорит о том, что он считает неправильно.
Попробуйте мой вариант по любым суммам не меньше 35 и по любым периодам - есть хоть один вариант, в котором что-то не так?

Мой пример работает по следующим правилам:
1. Сумма должна закрываться за время, не большее указанного периода. Первая часть - сразу же, остальные - каждый месяц.
2. Части не должны быть меньше 35.
3. Все части одинаковые и кратные 5, за исключением последней, которая закрывает остаток суммы.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести диапазон чисел Atljh0987 Общие вопросы Javascript 3 19.01.2017 23:39
Как вывести значение формулы в <div> Андрей Есипович Элементы интерфейса 2 14.09.2016 16:26
вывести значение кнопки в текстовое поле matt_xs Общие вопросы Javascript 10 16.04.2016 14:50
Проблемы с выпадающим списком JavaScript ursus102 Общие вопросы Javascript 0 16.01.2016 19:30
Выводить значение раньше переменных Гробовщик Общие вопросы Javascript 11 10.09.2013 08:42