javascript - 为什么两个数字相乘时会出现 NaN 错误?

标签 javascript html

我的 getPercentage 函数工作得很好,但我的 getPayment 函数却不能,尽管它的写法完全一样。当我点击“获取付款”按钮时,它在 HTML 上返回“NaN”。

var taxes = {
  getPercentage: function(total, payment) {
   var percentage = (payment / total) * 100;
   return percentage;
   },
  getPayment: function(total, rate) {
    var payment = (total*rate);
    return payment;
    }
  };

var handlers = {
  getPercentage: function() {
    var totalInput = document.getElementById('totalInput');
    var paymentInput = document.getElementById('paymentInput');
    var answer = taxes.getPercentage(totalInput.value, paymentInput.value);
    getPercentageAnswer.innerHTML = answer;
  },
  getPayment: function() {
    var totalInputTwo = document.getElementById('totalInputTwo');
    var rateInput = document.getElementById("rateInput");
    var answer = taxes.getPayment(totalInputTwo.value, rateInput.value);
    getPaymentAnswer.innerHTML = answer;
  }
};
<div id="getPayment">
  <div id="totalTwo">
        Total owed: 
    <input id="totalInputTwo" type="text">
  </div>
<div id="rateInput">
      Your tax rate (as a decimal):
  <input id="rateInput" type="text">
  </div>
  <button onclick="handlers.getPayment()">Get payment</button>
  <p id="getPaymentAnswer"></p>
</div>

最佳答案

您有一个 div 和一个具有相同 id rateInputinput。因此,rateInput.value 尝试从 div 获取值,但它返回未定义。将 div 的 id 更改为其他内容,以在 rateInput 中获取正确的输入元素

var taxes = {
  getPayment: function(total, rate) {
    var payment = (total * rate);
    return payment;
  }
};

var handlers = {
  getPayment: function() {
    var totalInputTwo = document.getElementById('totalInputTwo');
    var rateInput = document.getElementById("rateInput");
    var answer = taxes.getPayment(+totalInputTwo.value, +rateInput.value);
    getPaymentAnswer.innerHTML = answer;
  }
};
<div id="getPayment">
  <div id="totalTwo">
    Total owed:
    <input id="totalInputTwo" type="text">
  </div>
  <div id="rate">
    Your tax rate (as a decimal):
    <input id="rateInput" type="text">
  </div>
  <button onclick="handlers.getPayment()">Get payment</button>
  <p id="getPaymentAnswer"></p>
</div>

注意:

输入的值始终为字符串格式。因此,在进行任何数学运算之前,您应该始终将它们解析为数字。当你相乘时,它们被强制转换为数字。所以,这里没有问题。但是,如果您要进行加法,则字符串将被连接,而不是添加它们的数值。

所以,您可以使用Unary plus operator将字符串转换为数字:

var answer = taxes.getPayment(+totalInputTwo.value, +rateInput.value);

关于javascript - 为什么两个数字相乘时会出现 NaN 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56316280/

相关文章:

javascript - 计算数字乘数后缀的更简单方法

html - 我的 Storenvy 页面上的自定义字体有问题

html - 我如何将几个类的规则组合成一个新的混合/类?

javascript - 显示函数的参数

javascript - 当前数字的正则表达式

javascript - 如何使用数据对象中的 id 删除卡片组件?

java spring - 具有附加值的发布请求

javascript - Reactjs:类似于 jQuery `on()` 的事件委托(delegate)?

javascript - 检测在 html 表中单击了哪个按钮

java - 使用 JSOUP 进行作者解析