Javascript计算器(Calculator) 利用Javascript计算形如“(8*(2*(2+3)*2)*10)*10 ”表达式的值...

下面代码有点问题:

不能计算 (-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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的JavaScript计算器,可以接收加减乘除运算符和两个数字,计算并输出结果。 ```html <!DOCTYPE html> <html> <head> <title>JavaScript Calculator</title> <meta charset="utf-8"> <script> function calculate() { // 获取输入的数据 var num1 = parseFloat(document.getElementById("num1").value); var num2 = parseFloat(document.getElementById("num2").value); var operator = document.getElementById("operator").value; // 计算结果 var result; switch(operator) { case "+": result = num1 + num2; break; case "-": result = num1 - num2; break; case "*": result = num1 * num2; break; case "/": result = num1 / num2; break; default: result = "Invalid operator"; } // 显示结果 document.getElementById("result").innerHTML = result; } </script> </head> <body> <h1>JavaScript Calculator</h1> <label for="num1">Number 1:</label> <input type="number" id="num1"><br><br> <label for="operator">Operator:</label> <select id="operator"> <option value="+">+</option> <option value="-">-</option> <option value="*">*</option> <option value="/">/</option> </select><br><br> <label for="num2">Number 2:</label> <input type="number" id="num2"><br><br> <button onclick="calculate()">Calculate</button> <p>Result: <span id="result"></span></p> </body> </html> ``` 在这个代码,我们使用了一个`switch`语句来根据运算符计算结果,并将结果显示在页面上。我们还使用了`parseFloat`函数来将输入的字符串转换为浮点数。如果输入的运算符无效,我们将在结果显示“Invalid operator”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值