Compare commits
No commits in common. "master" and "2.2.1" have entirely different histories.
96
lib/calc.js
96
lib/calc.js
@ -1,54 +1,48 @@
|
|||||||
/* eslint-disable */
|
module.exports = function (s) {
|
||||||
// 四则运算
|
s = s.trim();
|
||||||
|
const stack = new Array();
|
||||||
!(function () {
|
let preSign = '+';
|
||||||
var calculate = function (s) {
|
let numStr = '';
|
||||||
s = s.trim();
|
const n = s.length;
|
||||||
const stack = new Array();
|
for (let i = 0; i < n; ++i) {
|
||||||
let preSign = '+';
|
if (s[i] === '.' || (!isNaN(Number(s[i])) && s[i] !== ' ')) {
|
||||||
let numStr = '';
|
numStr += s[i];
|
||||||
const n = s.length;
|
} else if (s[i] === '(') {
|
||||||
for (let i = 0; i < n; ++i) {
|
let isClose = 1;
|
||||||
if (s[i] === '.' || (!isNaN(Number(s[i])) && s[i] !== ' ')) {
|
let j = i;
|
||||||
numStr += s[i];
|
while (isClose > 0) {
|
||||||
} else if (s[i] === '(') {
|
j += 1;
|
||||||
let isClose = 1;
|
if (s[j] === '(') isClose += 1;
|
||||||
let j = i;
|
if (s[j] === ')') isClose -= 1;
|
||||||
while (isClose > 0) {
|
|
||||||
j += 1;
|
|
||||||
if (s[j] === '(') isClose += 1;
|
|
||||||
if (s[j] === ')') isClose -= 1;
|
|
||||||
}
|
|
||||||
numStr = `${calculate(s.slice(i + 1, j))}`;
|
|
||||||
i = j;
|
|
||||||
}
|
}
|
||||||
if ((isNaN(Number(s[i])) && s[i] !== '.') || i === n - 1) {
|
numStr = `${calculate(s.slice(i + 1, j))}`;
|
||||||
let num = parseFloat(numStr);
|
i = j;
|
||||||
switch (preSign) {
|
}
|
||||||
case '+':
|
if (isNaN(Number(s[i]) && s[i] !== '.') || i === n - 1) {
|
||||||
stack.push(num);
|
let num = parseFloat(numStr);
|
||||||
break;
|
switch (preSign) {
|
||||||
case '-':
|
case '+':
|
||||||
stack.push(-num);
|
stack.push(num);
|
||||||
break;
|
break;
|
||||||
case '*':
|
case '-':
|
||||||
stack.push(stack.pop() * num);
|
stack.push(-num);
|
||||||
break;
|
break;
|
||||||
case '/':
|
case '*':
|
||||||
stack.push(stack.pop() / num);
|
stack.push(stack.pop() * num);
|
||||||
break;
|
break;
|
||||||
default:
|
case '/':
|
||||||
break;
|
stack.push(stack.pop() / num);
|
||||||
}
|
break;
|
||||||
preSign = s[i];
|
default:
|
||||||
numStr = '';
|
break;
|
||||||
}
|
}
|
||||||
|
preSign = s[i];
|
||||||
|
numStr = '';
|
||||||
}
|
}
|
||||||
let ans = 0;
|
}
|
||||||
while (stack.length) {
|
let ans = 0;
|
||||||
ans += stack.pop();
|
while (stack.length) {
|
||||||
}
|
ans += stack.pop();
|
||||||
return ans;
|
}
|
||||||
};
|
return ans;
|
||||||
module.exports = calculate;
|
};
|
||||||
})();
|
|
||||||
@ -851,7 +851,7 @@ function setStringPrototype(screenK, scale) {
|
|||||||
const formula = /^calc\((.+)\)$/.exec(this);
|
const formula = /^calc\((.+)\)$/.exec(this);
|
||||||
if (formula && formula[1]) {
|
if (formula && formula[1]) {
|
||||||
// 进行 calc 计算
|
// 进行 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('.');
|
const [id, attr] = word.split('.');
|
||||||
return penCache.viewRect[id][attr];
|
return penCache.viewRect[id][attr];
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user