<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
.wrap{
width: 400px;
height: 430px;
margin: 20px auto;
border: 1px solid #000;
}
input{
width: 396px;
height: 26px;
text-align: right;
}
.box{
padding-top: 10px;
width: 400px;
height: 300px;
text-align: center;
}
button{
width: 25%;
height: 30px;
cursor: pointer;
margin:2px 10px;
}
</style>
</head>
<body>
<div class="wrap">
<input type="text" name="result" id="result" value="" />
<div class="box">
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>
<button>5</button>
<button>6</button>
<button>7</button>
<button>8</button>
<button>9</button>
<button>0</button>
<button>+</button>
<button>-</button>
<button>*</button>
<button>/</button>
<button>=</button>
<button>back</button>
</div> </div>
</body> <script type="text/javascript">
var buttonList = document.getElementsByTagName('button');
var input = document.getElementById('result');
var dataSource = [];
for(var i = 0; i < buttonList.length; i++){
buttonList[i].onclick = function(){
var str = this.innerHTML;
if(str == 'back'){
calcBack();
return ;
}else if(dataSource[dataSource.length -1] == '='){
dataSource = []; //上一次是=,再点击则清空
} dataSource.push(str);
dataSource = handle(dataSource);
handReult(dataSource);
}
} function calcBack(){
var arr = dataSource.join('').split('');
arr.pop();
dataSource = handle(arr);
handReult(dataSource);
} function show(arr){
var result = arr.join('');
input.value = result;
} function handle(newArr){
var temp = []; //处理好的数据
var str = ''; for(var i = 0; i < newArr.length; i++){
var num = Number(newArr[i]);
if(num || num === 0){
//一定是数字
str = str+newArr[i];
}else{
//字符串,过滤重复的 + - * /
if(str != ''){
temp.push(str);
temp.push(newArr[i]);
str ='';
}
} }
if(str != ''){
temp.push(str);
str = '';
} //去掉前面的0
for(var i = 0 ; i < temp.length; i++){
var num = Number(temp[i]);
if(num || num == 0){
temp[i] = Number(temp[i]);
}
} return temp; } function handReult(temp){
temp = JSON.parse(JSON.stringify(temp));
//判断是否要计算
if(temp[temp.length-1] == '='){
var result = calcu(temp);
temp.push(result);
} //显示
show(temp);
} function calcu(arr){
var newArr = JSON.parse(JSON.stringify(arr)); //复制数组,去掉引用 //计算除法
while(newArr.indexOf('/') != -1){
var index = newArr.indexOf('/');
var num1 = newArr[index-1];
var num2 = newArr[index+1];
var result = num1/num2;
newArr.splice(index-1,3,result);
} //乘法
while(newArr.indexOf('*') != -1){
var index = newArr.indexOf('*');
var num1 = newArr[index-1];
var num2 = newArr[index+1];
var result = num1*num2;
newArr.splice(index-1,3,result);
} //减法
while(newArr.indexOf('-') != -1){
var index = newArr.indexOf('-');
var num1 = newArr[index-1];
var num2 = newArr[index+1];
var result = num1-num2;
newArr.splice(index-1,3,result);
} //加法
while(newArr.indexOf('+') != -1){
var index = newArr.indexOf('+');
var num1 = newArr[index-1];
var num2 = newArr[index+1];
var result = num1+num2;
newArr.splice(index-1,3,result);
}
return newArr[0];
}
</script>
</html>

  

js简易计算器底层运算逻辑(带撤销功能)的更多相关文章

  1. Android实训案例(一)——计算器的运算逻辑

    Android实训案例(一)--计算器的运算逻辑 应一个朋友的邀请,叫我写一个计算器,开始觉得,就一个计算器嘛,很简单的,但是写着写着发现自己写出来的逻辑真不严谨,于是搜索了一下,看到mk(没有打广告 ...

  2. JS简易计算器的实现,以及代码的优化

    用JS实现简易计算器 首先创建结构和样式 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  3. as3.0划线带撤销功能

    package com{ import flash.display.MovieClip; import flash.display.SimpleButton; import flash.events. ...

  4. 用js制作简易计算器及猜随机数字游戏

    <!doctype html><html><head> <meta charset="utf-8"> <title>JS ...

  5. 剖析简易计算器带你入门微信小程序开发

    写在前面,但是重点在后面 这是教程,也不是教程. 可以先看Demo的操作动图,看看是个什么玩意儿,GitHub地址(https://github.com/dunizb/wxapp-sCalc) 自从微 ...

  6. 原生JS实现简易计算器

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 大一C语言学习笔记(10)---编程篇--制作简易计算器,支持加,减,乘,除,取余运算,要求 0 bug

    博主自开学初就一直在努力为自己的未来寻找学习方向,学习编程嘛,尽量还是要抱大腿的,所以我就加入了我们学校的智能设备研究所,别的不说,那的学长们看起来是真的很靠谱,学长们的学习氛围也超级浓厚,所以我就打 ...

  8. 使用html+css+js实现简易计算器

    使用html+css+js实现简易计算器, 效果图如下: html代码如下: <!DOCTYPE html> <html lang="en"> <he ...

  9. 项目:JS实现简易计算器案例

    组件化网页开发下的: 步骤一:让页面动起来的JavaScript深入讲解  的 项目:JS实现简易计算器案例

随机推荐

  1. hadoop fs 获取文件大小

    du 使用方法:hadoop fs -du URI [URI …] 显示目录中所有文件的大小,或者当只指定一个文件时,显示此文件的大小.示例:hadoop fs -du /user/hadoop/di ...

  2. Redhat7.5安装glusterfs4

    redhat7.5自带yum源不包含glusterfs4,下面通过rpm包的方式安装glusterfs4 环境查看 glusterfs官方网站下载rpm包下载地址 https://buildlogs. ...

  3. codeforces#525 Div2---ABC

    A---Ehab and another constriction problem https://codeforc.es/contest/1088/problem/A 题意:给定一个数$x$找两个在 ...

  4. 蚂蚁金服研发的金融级分布式中间件SOFA背后的故事

    导读:GIAC大会期间,蚂蚁金服杨冰,黄挺等讲师面向华南技术社区做了<数字金融时代的云原生架构转型路径>和<从传统服务化走向Service Mesh>等演讲,就此机会,高可用架 ...

  5. vins-mono源码解读

    https://blog.csdn.net/q597967420/article/details/76099409

  6. 淘宝NPM镜像cnpm

    # 安装cnpm命令 npm install -g cnpm --registry=https://registry.npm.taobao.org2.cnpm install

  7. 开发人员如何从官网首页进入下载JDK历史版本

    就是下面的这篇文章,好心好意提交到百度经验,希望给需要的人一个帮助,结果被拒,说有广告.呵呵,oracle和java真的需要在你百度上面做广告吗?倒是能理解,可能是外行人做的,只是看到链接就拒了,但是 ...

  8. [No0000123]WPF DataGrid Columns Visibility的绑定

    场景:根据配置文件显示DataGrid中的某些列. 问题:Columns集合只是DataGrid的一个属性,这个集合在逻辑树或视觉树中是看不到的,也不会继承DataContext属性. 方法一:对Da ...

  9. [No0000108]Git1/9-Git简介与入门

    Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有什么特点?简单来说就是:高端大气上档次! 那什么是版本控制系统? 如果你用Microsoft Word写过长篇大论, ...

  10. python-----双色球实现(实例1)

    #输出用户指定组数的双色球信息,其中一组信息 6个红色号码获取范围(1-33),1个蓝色号码获取范围(1-16),要求一组信息中红球内号码不可重复 import randomdef get_ball( ...