题解 | #简易计算器#

简易计算器

https://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.target;
			// 请补充代码:获取target的 data-action 值
			var action = target.dataset.action;
			// 请补充代码:获取target的内容
			var value = target.innerHTML;
			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 === '÷') {
            if (n2 == 0) {
				return 0
			}
			// 请补充代码:获取除法的结果
			if ((n1 / n2).toString().length > 5 && (n1 / n2).toString().indexOf('.') != -1) {
				if ((n1 / n2).toFixed(2).toString()[(n1 / n2).toFixed(2).toString().length - 1] == 0) {
					return Number((n1 / n2).toFixed(2).toString().substring(0, (n1 / n2).toFixed(2).toString().length - 1))
				} else {
					return Number((n1 / n2).toFixed(2))
				}
			} else {
				return Number(n1 / n2)
			}
		} else if (operator === 'x') {
			if ((n1 * n2).toString().length > 5 && (n1 * n2).toString().indexOf('.') != -1) {
				if ((n1 * n2).toFixed(2).toString()[(n1 * n2).toFixed(2).toString().length - 1] == 0) {
					return Number((n1 * n2).toFixed(2).toString().substring(0, (n1 * n2).toFixed(2).toString().length - 1))
				} else {
					return Number((n1 * n2).toFixed(2))
				}
			} else {
				return Number(n1 * n2)
			}
		} else if (operator === '+') {

			if ((n1 + n2).toString().length > 5 && (n1 + n2).toString().indexOf('.') != -1) {
				if ((n1 + n2).toFixed(2).toString()[(n1 + n2).toFixed(2).toString().length - 1] == 0) {
					return Number((n1 + n2).toFixed(2).toString().substring(0, (n1 + n2).toFixed(2).toString().length - 1))
				} else {
					return Number((n1 - n2).toFixed(2))
				}
			} else {
				return Number(n1 + n2)
			}
		} else if (operator === '-') {
			if ((n1 - n2).toString().length > 5 && (n1 - n2).toString().indexOf('.') != -1) {
				if ((n1 - n2).toFixed(2).toString()[(n1 - n2).toFixed(2).toString().length - 1] == 0) {
					return Number((n1 - n2).toFixed(2).toString().substring(0, (n1 - n2).toFixed(2).toString().length - 1))
				} else {
					return Number((n1 - n2).toFixed(2))
				}
			} else {
				return Number(n1 - n2)
			}
		}
	}
};
Calculator.init();

全部评论

相关推荐

矫健的闭门羹烹饪师又熬夜了:本人双非本,在鹅厂测开实习,你这个简历上写的这两个项目的技术栈都差不多,能够让面试官去延伸去问的八股除了redis就再没啥了,建议项目这边可以再改改,然后专业技能那块的话,感觉linux和测试工具可以分开写,毕竟不是干一件事的,反正没实习的基础上面试就深挖项目和八股,好好卷吧
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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