我正在尝试对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做数学,所以有点过头了!
非常感谢
答案 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