博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript计算器(Calculator) 利用Javascript计算形如“(8*(2*(2+3)*2)*10)*10 ”表达式的值...
阅读量:6094 次
发布时间:2019-06-20

本文共 4297 字,大约阅读时间需要 14 分钟。

下面代码有点问题:

不能计算 (-8*(2*(-2+3)*2)*10)*10

有时间会更新最新的

 

哎,大学没学好,现在又开始写着简单的计算器

计算一个表达式(字符串)的值

下面只是给出了计算字符串

(8*(2*(2+3)*2)*10)*10 的值

 

1         var temData = new Array();  2         var temStr = new Array();  3         (function () {  4             var cla = '(8*(2*(2+3)*2)*10)*10 ';  5             IntoStack(cla);  6             SS();  7         })();  8   9         function IntoStack(str) { 10             var strs = ""; 11             for (var i = 0; i < str.length; i++) { 12                 switch (str[i]) { 13                     case '*': 14                     case '+': 15                     case '-': 16                     case '/': 17                     case '(': 18                         if (strs.length > 0) { 19                             temData.push(parseFloat(strs)); 20                             strs = ''; 21                         } 22                         if (str[i] != '(') { 23                             JiSuan(str[i]); 24                         } 25                         temStr.push(str[i]); 26                         break; 27                     case ')': 28                         if (strs.length > 0) { 29                             temData.push(parseFloat(strs)); 30                             strs = ''; 31                         } 32                         Kh(); 33                         break; 34                     default: 35                         strs += str[i]; 36                         break; 37                 } 38             } 39             if (strs != '') { 40                 temData.push(parseFloat(strs)); 41             } 42         } 43  44         function Kh() { 45             var expr = temStr.pop(); 46             var data1; 47             var data; 48             var data2; 49             while (expr != '(') { 50                 data1 = temData.pop(); 51                 data2 = temData.pop(); 52                 data = Calculate(data2, data1, expr); 53                 temData.push(data); 54                 expr = temStr.pop(); 55             }; 56             var s = 's'; 57         } 58  59  60         function JiSuan(str) { 61             if (Priority(str) <= Priority(temStr[temStr.length - 1])) { 62                 var data1 = temData.pop(); 63                 var data2 = temData.pop(); 64                 var expr = temStr.pop(); 65                 var data = Calculate(data2, data1, expr); 66                 temData.push(data); 67                 console.log(data); 68             } 69         } 70         function SS() { 71             for (var i = temStr.length - 1; i >= 0; i--) { 72                 var data1 = temData.pop(); 73                 var data2 = temData.pop(); 74                 var expr = temStr[i]; 75                 var data = Calculate(data2, data1, expr); 76                 temData.push(data); 77                 console.log(data); 78             } 79         } 80  81         function Priority(expr) {  ///优先级别 82             var result = 0; 83             switch (expr) { 84                 case '*': 85                 case '/': 86                     result = 2; 87                     break; 88  89                 case '-': 90                 case '+': 91                     result = 1; 92                     break; 93  94                 case '(': 95                     result = 0; 96                     break; 97  98                 case ')': 99                     result = 3;100                     break;101                 default:102                     result = -1;103                     break;104             }105             return result;106         }107         function Calculate(data1, data2, expr) {108             var result = 0;109             switch (expr) {110                 case '*':111                     result = data1 * data2;112                     break;113                 case '/':114                     result = data1 / data2;115                     break;116                 case '-':117                     result = data1 - data2;118                     break;119                 case '+':120                     result = data1 + data2;121                     break;122                 default: return 0;123             }124             return result;125         }126

转载于:https://www.cnblogs.com/AspJS/archive/2012/06/27/2564590.html

你可能感兴趣的文章
IIS7下使用urlrewriter.dll配置
查看>>
12.通过微信小程序端访问企查查(采集工商信息)
查看>>
WinXp 开机登录密码
查看>>
POJ 1001 Exponentiation
查看>>
HDU 4377 Sub Sequence[串构造]
查看>>
云时代架构阅读笔记之四
查看>>
WEB请求处理一:浏览器请求发起处理
查看>>
Lua学习笔记(8): 元表
查看>>
PHP经典算法题
查看>>
LeetCode 404 Sum of Left Leaves
查看>>
醋泡大蒜有什么功效
查看>>
hdu 5115(2014北京—dp)
查看>>
数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)...
查看>>
PHP读取日志里数据方法理解
查看>>
第五十七篇、AVAssetReader和AVAssetWrite 对视频进行编码
查看>>
Vivado增量式编译
查看>>
一个很好的幻灯片效果的jquery插件--kinMaxShow
查看>>
微信支付签名配置正确,但返回-1,调不出支付界面(有的手机能调起,有的不能)...
查看>>
第二周例行报告
查看>>
DataTable - the existing record can not be merged,just be added
查看>>