Skip to content

Commit f7bf050

Browse files
committed
fix: 四则运算
1 parent 138d9d1 commit f7bf050

File tree

1 file changed

+51
-45
lines changed

1 file changed

+51
-45
lines changed

components/painter/lib/calc.js

Lines changed: 51 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,54 @@
1-
module.exports = function (s) {
2-
s = s.trim();
3-
const stack = new Array();
4-
let preSign = '+';
5-
let numStr = '';
6-
const n = s.length;
7-
for (let i = 0; i < n; ++i) {
8-
if (s[i] === '.' || (!isNaN(Number(s[i])) && s[i] !== ' ')) {
9-
numStr += s[i];
10-
} else if (s[i] === '(') {
11-
let isClose = 1;
12-
let j = i;
13-
while (isClose > 0) {
14-
j += 1;
15-
if (s[j] === '(') isClose += 1;
16-
if (s[j] === ')') isClose -= 1;
1+
/* eslint-disable */
2+
// 四则运算
3+
4+
!(function () {
5+
var calculate = function (s) {
6+
s = s.trim();
7+
const stack = new Array();
8+
let preSign = '+';
9+
let numStr = '';
10+
const n = s.length;
11+
for (let i = 0; i < n; ++i) {
12+
if (s[i] === '.' || (!isNaN(Number(s[i])) && s[i] !== ' ')) {
13+
numStr += s[i];
14+
} else if (s[i] === '(') {
15+
let isClose = 1;
16+
let j = i;
17+
while (isClose > 0) {
18+
j += 1;
19+
if (s[j] === '(') isClose += 1;
20+
if (s[j] === ')') isClose -= 1;
21+
}
22+
numStr = `${calculate(s.slice(i + 1, j))}`;
23+
i = j;
1724
}
18-
numStr = `${calculate(s.slice(i + 1, j))}`;
19-
i = j;
20-
}
21-
if (isNaN(Number(s[i]) && s[i] !== '.') || i === n - 1) {
22-
let num = parseFloat(numStr);
23-
switch (preSign) {
24-
case '+':
25-
stack.push(num);
26-
break;
27-
case '-':
28-
stack.push(-num);
29-
break;
30-
case '*':
31-
stack.push(stack.pop() * num);
32-
break;
33-
case '/':
34-
stack.push(stack.pop() / num);
35-
break;
36-
default:
37-
break;
25+
if ((isNaN(Number(s[i])) && s[i] !== '.') || i === n - 1) {
26+
let num = parseFloat(numStr);
27+
switch (preSign) {
28+
case '+':
29+
stack.push(num);
30+
break;
31+
case '-':
32+
stack.push(-num);
33+
break;
34+
case '*':
35+
stack.push(stack.pop() * num);
36+
break;
37+
case '/':
38+
stack.push(stack.pop() / num);
39+
break;
40+
default:
41+
break;
42+
}
43+
preSign = s[i];
44+
numStr = '';
3845
}
39-
preSign = s[i];
40-
numStr = '';
4146
}
42-
}
43-
let ans = 0;
44-
while (stack.length) {
45-
ans += stack.pop();
46-
}
47-
return ans;
48-
};
47+
let ans = 0;
48+
while (stack.length) {
49+
ans += stack.pop();
50+
}
51+
return ans;
52+
};
53+
module.exports = calculate;
54+
})();

0 commit comments

Comments
 (0)