我正在编写一个程序,该程序使用小数和税率两个数字,并打印营业税和总计。但是,我在编写该代码时遇到了多个问题,因此我尝试将其倒退并将其愚弄到仅将两个数字相加。但是,与其添加数字,不如简单地并排打印两个数字。谁能告诉我我的代码有什么问题吗?
https://codepen.io/anon/pen/jvNZox
HTML:
var subtotal = document.getElementById("subtotal");
var taxRate = document.getElementById("tax-rate");
var salesTax = document.getElementById("sales-tax");
var total = document.getElementById("total");
subtotal.addEventListener("input", calc);
taxRate.addEventListener("input", calc);
function calc()
{
var sub = (subtotal.value) || 0;
var tax = (taxRate.value) || 0;
total.innerHTML = sub + tax;
}
JS:
var subtotal = document.getElementById("subtotal");
var taxRate = document.getElementById("tax-rate");
var salesTax = document.getElementById("sales-tax");
var total = document.getElementById("total");
subtotal.addEventListener("input", calc);
taxRate.addEventListener("input", calc);
function calc()
{
var sub = (subtotal.value) || 0;
var tax = (taxRate.value) || 0;
total.innerHTML = sub + tax;
}
编辑:我的糟糕,忘了在我的值检查之前添加parseFloat。回到原始代码时,同样的问题仍然存在:
var subtotal = document.getElementById("subtotal");
var taxRate = document.getElementById("tax-rate");
var salesTax = document.getElementById("sales-tax");
var total = document.getElementById("total");
subtotal.addEventListener("input", calc);
taxRate.addEventListener("input", calc);
function calc()
{
var sub = parseFloat(subtotal.value) || 0;
var tax = parseFloat(taxRate.value) || 0;
salesTax.innerHTML = sub * (tax /100);
total = sub + salesTax.innerHTML;
}
答案 0 :(得分:2)
您碰到value
是字符串的事实,并且可以使用+
来连接字符串以及累加数字。
首先将数字字符串解析为实际数字:
function calc()
{
var sub = parseFloat(subtotal.value || 0);
var tax = parseFloat(taxRate.value || 0);
total.innerHTML = sub + tax;
}
答案 1 :(得分:1)
例如,您需要使用unary plus +
来获取字符串的数值。
这种方法的优势在于,如果提供了不可转换的字符串,则将NaN
值作为falsy值,并与logical OR ||
一起得到零作为默认值。
var sub = +subtotal.value || 0;
var tax = +taxRate.value || 0;
答案 2 :(得分:1)
JavaScript将值视为两个字符串,因此将它们组合在一起。
执行以下操作:
var subtotal = document.getElementById("subtotal");
var taxRate = document.getElementById("tax-rate");
var total = document.getElementById("total");
subtotal.addEventListener("input", calc);
taxRate.addEventListener("input", calc);
function calc() {
var sub = Number(subtotal.value) || 0;
var tax = Number(taxRate.value) || 0;
total.innerHTML = sub + tax;
}
<p> Subtotal: <input id = "subtotal"></p>
<p> Tax Rate: <input id = "tax-rate"></p>
<p id = "total"></p>
答案 3 :(得分:0)
更改逻辑,以将其添加到下面,就像以前将其视为JavaScript字符串一样,而不是将其相加而不是将其串联。明确将其转换为整数/双精度将防止这种情况。 '||'处理文本字段中的非数字数据。
./configure
make
答案 4 :(得分:0)
您需要将字符串值转换为整数类型。为此,您可以使用parseInt函数:
total.innerHTML = parseInt(sub) + parseInt(tax);