#javascript #function
#javascript #функция
Вопрос:
Я пытался создать систему, которая автоматически снижала бы цену каждый месяц, поэтому в декабре вы платите 1/12 от цены, а в феврале вы платите 11/12 и так далее.
Но, похоже, я не могу с этим разобраться, поэтому я здесь, чтобы попросить о помощи 🙂
function calcTotalPrice(){
var month = new Array();
month[0] = "January";
month[1] = "February";
month[2] = "March";
month[3] = "April";
month[4] = "May";
month[5] = "June";
month[6] = "July";
month[7] = "August";
month[8] = "September";
month[9] = "October";
month[10] = "November";
month[11] = "December";
var d = new Date();
var n = month[d.getMonth()];
// document.getElementById("demo").innerHTML = n;
var yearPrijs = 12.5;
var membership = new Array();
if (month[0]){
membership[0] = yearPrice;
}
else{
for(i = 0;i < month.length; i ){
yearPrice = yearPrice*0.9167;
membership[i] = yearPrice;
}
}
}
Комментарии:
1. Вы имеете в виду
12.5 - (new Date().getMonth() * 0.9167)
?2.
yearPrice*0.9167
должно бытьyearPrice = yearPrice*0.9167
3.
if (month[0])
всегда будет верно….4. Общий совет: используйте отладчик и концентрируйтесь на желаемом результате каждого шага. Таким образом, вы должны быстро увидеть расхождения. Работает и без отладчика, если вы знакомы с языком программирования.
5. @Liam Что я мог сделать, чтобы сделать его лучше, я сам не силен в Javascript.
Ответ №1:
Хорошо @jssse, я думаю, я понял, что требуется.
let startDate = new Date();
let startPrice = 12.5;
// Copy the date/price for use in the loop
let newDate = startDate;
let newPrice = startPrice;
let monthly = [];
let totalPrice = 0;
let month = new Array();
month[0] = "January";
month[1] = "February";
month[2] = "March";
month[3] = "April";
month[4] = "May";
month[5] = "June";
month[6] = "July";
month[7] = "August";
month[8] = "September";
month[9] = "October";
month[10] = "November";
month[11] = "December";
// Uncomment either:
// To start from this month, if it is January, or January next year if not
// So, for September 2020, this will be January 2021
//let startMonth = newDate.getMonth();
//if (startMonth != 0) {
// newDate = new Date(newDate.setMonth(12));
//}
// OR:
// To start from January this year, no matter what month we are in
// so, for September 2020, this will be January 2020
newDate = new Date(newDate.setMonth(0));
for (let i = 0; i < 12; i ) {
newPrice = Math.round(newPrice * 100)/100;
monthly.push({"Month": month[newDate.getMonth()], "Cost": newPrice});
totalPrice = newPrice;
// create the new date/price for next month
//newPrice = newPrice - (newPrice * (1 / 12));
newPrice = newPrice - (startPrice / 12);
let m = newDate.getMonth() 1;
newDate = new Date(newDate.setMonth(m));
}
console.table(monthly);
console.log(totalPrice);
Для подобных вещей часто проще всего создать что-то в электронной таблице — как только вы получите нужные результаты, у вас будет формула, которую вы можете преобразовать в код javascript. В этом случае это просто случай уменьшения суммы на 1/12 каждый месяц — но только после того, как будет обработан первый месяц (точно так же, как в электронной таблице — вы помещаете формулу только во вторую строку и далее).
Обычно при выводе массива я бы использовал console.table(arrayname) — но, похоже, это не работает во фрагментах, поэтому я использовал console.вместо этого войдите в систему, поэтому вам, возможно, придется скопировать код в свой собственный html-файл, чтобы увидеть значения массива.
Комментарии:
1. Эй, спасибо, чувак, за ваше время, но это не то, что я ищу. Позвольте мне объяснить лучше, каждый год, начиная с января, у вас есть цена, которая в этом году составляет 12,50 « цена = 12,50 января = цена февраля = цена / 12 * 11 марта = цена / 12 * 10 и так далее. «`
2. Разве это не был закомментированный фрагмент моего кода — строка, начинающаяся с «// ИЛИ …» ? Раскомментируйте эту строку и прокомментируйте строку выше, которая начинается с «NewPrice =», Что снижает цену на 1/12 от первоначальной цены каждый месяц. Код в его нынешнем виде даст вам 12.50, 11.46, 10.51, 9.63, 8.83, 8.09, 7.42, 6.80, 6.23, 5.71, 5.23 и 4.70. Переключая строки кодов, вы получаете: 12.50, 11.46, 10.42, 9.38, 8.34, 7.30, 6.26, 5.22, 4.18, 3.14, 2.10 и 1.06. Если ни один из них не верен, то я понятия не имею, какова ваша формула!
3. Возможно, вам будет проще сначала создать что-то в электронной таблице. Поместите начальное значение в A1, затем добавьте формулу в B1, которая вычисляет значение следующего месяца на основе значения A1. Скопируйте это, чтобы завершить год, и проверьте результаты. Если результаты соответствуют вашим потребностям, включите формулу из B1 в свой код, объясняя, что это формула, которую вы хотите превратить в код javascript. Таким образом, пока мы понимаем формулы электронных таблиц, мы можем видеть, чего вы хотите достичь.
4. Я оцениваю советы, теперь осталось сделать только одно, а именно сделать так, чтобы полная цена была указана только в январе, а не в том месяце, в котором мы находимся. Я думаю, что мне нужно изменить этот месяц [newDate.getMonth() в массив (месяцы) Или мне нужно изменить новую дату на январь?
5. Всегда ли цены будут начинаться с января? Итак, в этом месяце, в сентябре 2020 года, вы хотите начать в январе 2021 года, но если бы он запускался в январе 2021 года, тогда оставьте это? ИЛИ вы хотите вернуться к январю 2020 года на этот месяц?