2016-07-31 3 views
2

Я пытаюсь применить скидку на выбор в JavaScript, но по какой-то причине мой код возвращает итоговое значение для вычитания как общей стоимости:Функция JavaScript «X - Y = Z» возвращает Y как значение Z

selectone = parseInt(selectone); 

    var textarea = document.getElementById('discount'); 
    var word = '15off'; 
    var textValue=textarea.value; 
    if (textValue.indexOf(word)!=-1) 
    { 
     var discval = parseFloat(selectone); 
     var num = parseInt(discval); 
     var retval = num - (num * .15); 

    } else { 
     var retval = 0 
    } 

    var total = selectone - retval; 
    document.getElementById("rettotal").innerHTML = "Price starts from £" + total; 
} 

Например, если что-то стоит £ 100 и скидка 15% применяется, общее будет '£ 15' вместо '£ 100' ('RetVal' вместо 'общей')

Есть что-то, что я пропустил в этом, или чего-то не хватает? Я не делал математику в JavaScript, так что немного над головой!

Большое спасибо

+0

Что такое переменная SelectOne? – TheValyreanGroup

+1

z = x -y; может работать –

+0

@RonRoyston joker (; – num8er

ответ

2

Потому что ... математика.

selectone = parseInt(selectone); 
...  
var discval = parseFloat(selectone); // doesn't change the things, it's an int already 
var num = parseInt(discval); // so num is essentially discval, which is selectone 
var retval = num - (num * .15); // here you get 85% of num... 
... 
var total = selectone - retval; // here you get 15% back 

Исправление для удаления num - из retval, так var retval = num * .15;

код вы показали может быть сжат до этого:

var textarea = document.getElementById('discount'); 
var total = parseFloat(selectone)*(1-0.15*textarea.value.includes("15off")); 
document.getElementById("rettotal").innerHTML = "Price starts from £" + total; 

Или, если у вас есть проблемы с includes() не поддерживается вашим браузером (в случае, если это IE), вы также можете использовать match():

var total = parseFloat(selectone)*(1-0.15*(textarea.value.match("15off")|0)); 
+0

Вы разрушили вычисления !! Просто верните (общая стоимость - 15%) !!! см. Другой ответ! –

+1

@ Ismail Я ничего не испортил. * Просто верните (общая стоимость - 15%) * - вот что я предлагаю сделать, rea d последнее предложение. В другом ответе в основном упоминаются те же вещи, что и мои. – nicael

+0

Я уверен, что у ОП появится головная боль после вашего кода: D В любом случае, ответ правильный! –

3

У вас есть логическая проблема в математической части.

Вы хотите получить сумму после скидки.

Вы делаете это:

var retval = num - (num * .15); // 100 - (100 * .15) = 85 

Но после того, как вы удаляете скидка от суммы:

var total = selectone - retval; // 100 - 85 = 15 


Так вот фикс:

var price = parseFloat(selectone); 
var discount = (textValue.indexOf('15off') != -1)? 
       price * .15 
       : 0; 
var total = price - discount; // 100 - 15 = 85 

или просто быть простым (если скидка применяется один раз):

var total = parseFloat(selectone); 
if(textValue.indexOf('15off') != -1) { 
    total *= .85; 
} 

давайте быть гибкой (применение нескольких скидок к цене):

var textValue = 'take this 15off and this 10off'; 
 
    var price = parseFloat(1000); 
 
    var total = price; 
 

 
     total-= (textValue.indexOf('15off') != -1)? 
 
        price * .15 
 
        : 0; 
 

 
    console.log(total); 
 

 
     total-= (textValue.indexOf('10off') != -1)? 
 
        price * .15 
 
        : 0; 
 

 
    console.log(total);

+1

Спасибо num8er. Ваш ответ немного перевернулся, но я уверен, что посмотрю на него завтра после сна. Я получу его;) Большое спасибо за объяснение по поводу этого процесса - очень ценю – Aaron

0

У вас есть JavaScript оператор приоритет и значение проблем есть. Это синтаксическая ошибка с вашей стороны. В выражении, как это:

x - y = z 

Вы думаете, что:

 z = x - y //but it's not. 

То, что вы действительно говорят:

 y = z and x = x - z 
Смежные вопросы