Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
beb630d5a2 | ||
|
|
eeb4f8a0fa |
96
lib/calc.js
96
lib/calc.js
@ -1,48 +1,54 @@
|
||||
module.exports = function (s) {
|
||||
s = s.trim();
|
||||
const stack = new Array();
|
||||
let preSign = '+';
|
||||
let numStr = '';
|
||||
const n = s.length;
|
||||
for (let i = 0; i < n; ++i) {
|
||||
if (s[i] === '.' || (!isNaN(Number(s[i])) && s[i] !== ' ')) {
|
||||
numStr += s[i];
|
||||
} else if (s[i] === '(') {
|
||||
let isClose = 1;
|
||||
let j = i;
|
||||
while (isClose > 0) {
|
||||
j += 1;
|
||||
if (s[j] === '(') isClose += 1;
|
||||
if (s[j] === ')') isClose -= 1;
|
||||
/* eslint-disable */
|
||||
// 四则运算
|
||||
|
||||
!(function () {
|
||||
var calculate = function (s) {
|
||||
s = s.trim();
|
||||
const stack = new Array();
|
||||
let preSign = '+';
|
||||
let numStr = '';
|
||||
const n = s.length;
|
||||
for (let i = 0; i < n; ++i) {
|
||||
if (s[i] === '.' || (!isNaN(Number(s[i])) && s[i] !== ' ')) {
|
||||
numStr += s[i];
|
||||
} else if (s[i] === '(') {
|
||||
let isClose = 1;
|
||||
let j = i;
|
||||
while (isClose > 0) {
|
||||
j += 1;
|
||||
if (s[j] === '(') isClose += 1;
|
||||
if (s[j] === ')') isClose -= 1;
|
||||
}
|
||||
numStr = `${calculate(s.slice(i + 1, j))}`;
|
||||
i = j;
|
||||
}
|
||||
numStr = `${calculate(s.slice(i + 1, j))}`;
|
||||
i = j;
|
||||
}
|
||||
if (isNaN(Number(s[i]) && s[i] !== '.') || i === n - 1) {
|
||||
let num = parseFloat(numStr);
|
||||
switch (preSign) {
|
||||
case '+':
|
||||
stack.push(num);
|
||||
break;
|
||||
case '-':
|
||||
stack.push(-num);
|
||||
break;
|
||||
case '*':
|
||||
stack.push(stack.pop() * num);
|
||||
break;
|
||||
case '/':
|
||||
stack.push(stack.pop() / num);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
if ((isNaN(Number(s[i])) && s[i] !== '.') || i === n - 1) {
|
||||
let num = parseFloat(numStr);
|
||||
switch (preSign) {
|
||||
case '+':
|
||||
stack.push(num);
|
||||
break;
|
||||
case '-':
|
||||
stack.push(-num);
|
||||
break;
|
||||
case '*':
|
||||
stack.push(stack.pop() * num);
|
||||
break;
|
||||
case '/':
|
||||
stack.push(stack.pop() / num);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
preSign = s[i];
|
||||
numStr = '';
|
||||
}
|
||||
preSign = s[i];
|
||||
numStr = '';
|
||||
}
|
||||
}
|
||||
let ans = 0;
|
||||
while (stack.length) {
|
||||
ans += stack.pop();
|
||||
}
|
||||
return ans;
|
||||
};
|
||||
let ans = 0;
|
||||
while (stack.length) {
|
||||
ans += stack.pop();
|
||||
}
|
||||
return ans;
|
||||
};
|
||||
module.exports = calculate;
|
||||
})();
|
||||
|
||||
@ -851,7 +851,7 @@ function setStringPrototype(screenK, scale) {
|
||||
const formula = /^calc\((.+)\)$/.exec(this);
|
||||
if (formula && formula[1]) {
|
||||
// 进行 calc 计算
|
||||
const afterOne = formula[1].replace(/([^\s]+)\.(left|right|bottom|top|width|height)/g, word => {
|
||||
const afterOne = formula[1].replace(/([^\s\(\+\-\*\/]+)\.(left|right|bottom|top|width|height)/g, word => {
|
||||
const [id, attr] = word.split('.');
|
||||
return penCache.viewRect[id][attr];
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user