题解 | #简易计算器#

简易计算器

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元素
event = event || window.event;
var target = event.target;
// 请补充代码:获取target的 data-action 值
var action = target.getAttribute("data-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;
    function c(str1){
        let str2 = str1.toString().split(".");
        if(str2[1]){
            return str2[1].length > 2 ? str1.toFixed(2) : str1; 
        }
        return str1;
    }
    if (operator === '÷') {
        // 请补充代码:获取除法的结果
        n2 == 0 ? n1 = 0 : n1 = n1 / n2;
        return Number(c(n1));
    } else if (operator === 'x') {
        // 请补充代码:获取乘法的结果
        return Number(c(n1 * n2));
    } else if (operator === '+') {
        // 请补充代码:获取加法的结果
        return Number(c(n1 + n2));
    } else if (operator === '-') {
        // 请补充代码:获取减法的结果
        return Number(c(n1 - n2));
    }
}

};
Calculator.init();

全部评论

相关推荐

白火同学:大二有这水平很牛了,可以适当对关键信息加粗一点,比如关键技术、性能指标之类的。
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
昨天 18:09
门头沟学院 Java
苍穹外卖和谷粒商城这俩是不是烂大街了,还能做吗?
想去重庆的鸽子在吐槽:你不如把这俩做完自己搞明白再优化点再来问 何必贩卖焦虑
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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