JavaScript函数“X - Y = Z”将Y作为Z值返回

时间:2016-07-31 17:20:51

标签: javascript html variables

我正在尝试对JavaScript中的选择应用折扣,但出于某种原因,我的代码将总回报减去总价格:

  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英镑”(“延迟”而不是“总数”)

我有什么遗漏在这里,或者是缺少什么? 我没有用JavaScript做数学,所以有点过头了!

非常感谢

3 个答案:

答案 0 :(得分: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 :(得分: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));

答案 2 :(得分:0)

你有一个JavaScript运算符优先级和含义问题。您的语法错误。 在这样的表达式中:

    x - y = z

你在想:

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

你真正说的是:

     y = z and x = x - z