题解 | #计算器#

简易计算器

http://www.nowcoder.com/practice/8237298fd1354cdaabd04796280cc90e

这个很简单,没啥可说的,直接上代码
var Calculator = {
  init: function () {
    var that = this;
    if (!that.isInited) {
      that.isInited = true;
      // 保存操作信息
      // total: Number, 总的结果
      // next: String, 下一个和 total 进行运算的数据
      // action: String, 操作符号
      that.data = {total: 0, next: '', action: ''};
      that.bindEvent();
    }
  },
  bindEvent: function () {
    var that = this;
    // 请补充代码:获取 .cal-keyboard 元素
    var keyboardEl = document.querySelector(".cal-keyboard");
    keyboardEl && keyboardEl.addEventListener('click', function (event) {
      // 请补充代码:获取当前点击的dom元素
      var target = event.path[0];
      // 请补充代码:获取target的 data-action 值
      var action = target.dataset.action;
      // 请补充代码:获取target的内容
      var value = target.innerText;
      if (action === 'num' || action === 'operator') {
        that.result(value, action === 'num');
      }
    });
  },
  result: function (action, isNum) {
    var that = this;
    var data = that.data;
    if (isNum) {
      data.next = data.next === '0' ? action : (data.next + action);
      !data.action && (data.total = 0);
    } else if (action === '清空') {
      // 请补充代码:设置清空时的对应状态
      data.total = 0;
      data.next = "";
      data.action = "";
    } else if (action === '=') {
      if (data.next || data.action) {
        data.total = that.calculate(data.total, data.next, data.action);
        data.next = '';
        data.action = '';
      }
    } else if (!data.next) {
      data.action = action;
    } else if (data.action) {
      data.total = that.calculate(data.total, data.next, data.action);
      data.next = '';
      data.action = action;
    } else {
      data.total = +data.next || 0;
      data.next = '';
      data.action = action;
    }

    // ���补充代码:获取 .origin-value 元素
    var valEl = document.querySelector(".origin-value");
    valEl && (valEl.innerHTML = data.next || data.total || '0');
  },
  calculate: function (n1, n2, operator) {
    n1 = +n1 || 0;
    n2 = +n2 || 0;
    if (operator === '÷') {
      // 请补充代码:获取除法的结果
      // 【需求】1、除法操作时,如果被除数为0,则结果为0
      if(n2 === 0) return 0;
      n1 /= n2;
      // 【需求】2、结果如果为小数,最多保留小数点后两位,如 2 / 3 = 0.67(显示0.67), 1 / 2 = 0.5(显示0.5)
      if(String(n1).split(".")[1] && String(n1).split(".")[1].length > 2){
        n1 = n1.toFixed(2);
      }
      return n1 * 1;
    } else if (operator === 'x') {
      // 请补充代码:获取乘法的结果
      return n1 * n2;
    } else if (operator === '+') {
      // 请补充代码:获取加法的结果
      return Number((n1 + n2).toFixed(2));
    } else if (operator === '-') {
      // 请补充代码:获取减法的结果
      return Number((n1 - n2).toFixed(2));
    }
  }
};
Calculator.init();


全部评论
试下0.1*0.2和0.1+0.2
3 回复 分享
发布于 2021-07-12 15:12

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务