不知道我的代码怎么了

时间:2018-08-19 17:32:28

标签: javascript

我正在编写一个程序,该程序使用小数和税率两个数字,并打印营业税和总计。但是,我在编写该代码时遇到了多个问题,因此我尝试将其倒退并将其愚弄到仅将两个数字相加。但是,与其添加数字,不如简单地并排打印两个数字。谁能告诉我我的代码有什么问题吗?

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;
}

5 个答案:

答案 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);