Творческий доход


#1
if (buy >= 1000 && buy < 3000) {
    discountedBuy = buy * (5 / 100);
    discountedBuy = buy - discountedBuy;
  } else if (buy >= 3000 && buy < 5000) {
      discountedBuy = buy * (10 / 100);
      discountedBuy = buy - discountedBuy;
    } else if (buy >= 5000) {
        discountedBuy = buy * (15 / 100);
        discountedBuy = buy - discountedBuy;
      } else {
          discountedBuy = buy;
        }

#2

Можно проще:

var buy = 4000;
var discountedBuy;

if(buy >= 1000 && buy < 3000){
    discountedBuy = buy * 0.95
  }else if(buy >= 3000 && buy < 5000){
      discountedBuy = buy * 0.9
    }else if(buy >= 5000){
        discountedBuy = buy * 0.85
      }else discountedBuy = buy

#3
switch (true) {
  case buy >= 1000 && buy < 3000: discountedBuy = buy * 0.95; break;
  case buy >= 3000 && buy < 5000: discountedBuy = buy * 0.9; break;                 
  case buy >= 5000: discountedBuy = buy * 0.85; break;
  default: discountedBuy = buy;
}

#4

Мой вариант

var buy = 4000;
var discountedBuy;

var discount = 0;

if (buy >= 1000 && buy < 3000) {
discount = 5;
}
else if (buy >= 3000 && buy < 5000) {
discount = 10;
}
else if (buy >= 5000) {
discount = 15;
}

discountedBuy = buy * (100 - discount)/100;


#5

по сути одно и тоже, только у Kyver’a там ошибка, у него всегда по default’у будут результаты)


#6

вот мое решение /*
var buy = 4000;
var discountedBuy;
if (buy>=1000 && buy<3000){
discountedBuy = buy - (buy / 100 * 5);
} else if (buy>=3000 && buy<5000){
discountedBuy = buy - (buy / 100 * 10);
} else if (buy>=5000){
discountedBuy = buy - (buy / 100 * 15);
} else {
console.log(discountedBuy=buy);
}
*/


#7

твой вариант более симпатичен, нежели мой:+1:


#8

у меня так получилось:

var buy = 4000;
var discountedBuy = buy;

if (buy >= 1000 && buy < 3000) {
  discountedBuy = buy * 0.95;
}

if (buy >= 3000 && buy < 5000) {
  discountedBuy = buy * 0.90;
}

if (buy >= 5000) {
  discountedBuy = buy * 0.85;
}

#9
var buy = 999;
var discountedBuy;

if (buy < 1000) {
  console.log('Итого, стоимость ' + (discountedBuy = buy) + 'р.');
}
if (buy >= 1000 && buy < 3000) {
  discountedBuy = buy * 0.05
  if (discountedBuy = buy - discountedBuy) {
  console.log('Итого, стоимость ' + (discountedBuy) + 'р.');
  }
}
if (buy >= 3000 && buy < 5000) {
  discountedBuy = buy * 0.1
  if (discountedBuy = buy - discountedBuy) {
    console.log('Итого, стоимость ' + (discountedBuy) + 'р.');
  }
}
if (buy >= 5000) {
  discountedBuy = buy * 0.15
  if (discountedBuy = buy - discountedBuy) {
    console.log('Итого, стоимость ' + (discountedBuy) + 'р.');
  }
}

#10

Я иначе сделал:

var buy = 4000;
var discountedBuy;

if(buy >= 5000) {
  discountedBuy=buy - buy / 100 * 15;
} else if(buy >= 3000) {
  discountedBuy=buy - buy / 100 * 10;
} else if(buy >= 1000) {
  discountedBuy=buy - buy / 100 * 5;
} else {
  discountedBuy=buy;
}

#11

var buy = 4000;
var discountedBuy;
var discount = 1;
if (buy >= 1000 && buy < 3000) {
discount = 0.95;
} else if (buy >= 3000 && buy < 5000) {
discount = 0.9;
} else if (buy >= 5000) {
discount = 0.85;
}
discountedBuy = buy * discount;

Не знаю насколько правильно вышло, но проверку прошёл.


#12

мой вариант:

var discount
if (buy >= 1000 && buy < 3000){discount = 0.05}
else {discount = 0}
if (buy >= 3000 && buy < 5000){discount = 0.1}
if (buy >= 5000){discount = 0.15}

discountedBuy = buy - buy*discount

Но есть вопрос… Почему такая запись не работает?
if (1000 <= buy < 3000){discount = 0.05}


#13

потому что операторы имеют приоритет выполнения.
сначала вычисляется 1000 <= buy, возвращается например true
а теперь вычисляется true < 3000.

например, 1000 <= 1000000? (true)
true < 3000? приводим типы: 1 < 3000? (true)
в итоге имеем ошибку. пишите как в первом варианте.


#14

понял, спасибо, иными словами в JavaScript двойные неравенства не работают


#15

Добрый день.

Не могу понять, что не так в коде:

var buy = 4000;
var discountedBuy;

if (buy>=1000 && buy<3000){
discountedBuy=buy-(buy/100*5);}

if else (buy>=3000 && buy<5000){
discountedBuy=buy-(buy/100*10);}

if else (buy>=5000){
discountedBuy=buy-(buy/100*15);}

else {discountedBuy=buy;}


#16

Нашла ошибку, все норм!


#17

У меня так получилось:
var buy = 4000;
var discountedBuy;
if (buy>=1000 && buy<3000){discountedBuy=buy0.95}
else if (buy>=3000 && buy<5000){discountedBuy=buy
0.90}
else if (buy>=5000){discountedBuy=buy*0.85}
else {discountedBuy=buy}


#18
var buy = 4000;

var discountedBuy;

if (buy>=1000 && buy<3000){
discountedBuy=buy-(buy/1005);
}
else{
discountedBuy=buy;}
if (buy>=3000 && buy<5000){
discountedBuy=buy-(buy/100
10);
}
if (buy>=5000){
discountedBuy=buy-(buy/100*15);
}

Как-то не по феншую получилось. И не понятно почему, если else к последнему IF подписать, то проверку не пройдет…


#19

ну чтоб было по феншую, надо использовать конструкцию else if
а по-умолчанию сделать var discountedBuy = buy;
в ходе условных конструкций из discountedBuy достаточно вычитать размер скидки или же ввести новую переменную discount и просто её высчитывать, а в конце возвращать buy*discount


#20

По сути, то что я написал (последовательные IF друг за другом) это и есть else if, верно? Просто JS за меня это понял и “дописал” нужное :slight_smile: ?