首页 > 解决方案 > 在这种情况下,为什么算术运算返回 NaN?

问题描述

通过 JS 的练习,我制作了一些非常简单的应用程序,它计算了你在咖啡馆支付的小费。当我在制定一个公式时,它准确地计算了我遇到问题的技巧,我无法解释。如果我试图在一个公式中计算所有结果,我会得到一个 NaN,但如果我创建几个新变量,我会得到我期望的结果。这是一个代码:

window.onload = function() {
  const bill = document.getElementById('bill');
  const company = document.getElementById('people');
  const radioButtons = document.getElementsByName('service');
  const calcButton = document.getElementById('calculator');
  const resultDiv = document.getElementById('result-div');

  function calcTips() {
    let result;
    let srv;
    let billValue = parseFloat(bill.value);
    let comValue = parseFloat(company.value);
    for(let i = 0; i < radioButtons.length; i++) {
      if(radioButtons[i].checked === true) {
        switch(i) {
          case 0:
            svr = 30;
            break;
          case 1:
            svr = 20;
            break;
          case 2:
            svr = 15;
            break;
          case 3:
            svr = 10;
            break;
          case 4:
            svr = 0;
            break;
        }
      }
    }
    // arithmetic operations
    let temp = billValue / 100 * svr;
    let temp2 = billValue + temp;
    result = temp2 / comValue;
    console.log(result);
  }

  calcButton.addEventListener('click', calcTips);
}

该代码我运行良好,但如果我制定一个公式:

result = (billValue + (billValue / 100 * svr)) / comValue;

它返回NaN,你能解释一下为什么吗?

标签: javascriptdom

解决方案


你声明:

let srv;

但像这样使用:

let temp = billValue / 100 * svr;
                              ^-------------

对于修复更改,例如:

更改let srv;let svr;


推荐阅读