diff --git a/common/DistributeCalc/entry/src/main/js/default/common/calculator.js b/common/DistributeCalc/entry/src/main/js/default/common/calculator.js index 7d5b85b6b8e0a8dd3c959a1e29d248e17f69b6a9..5b2c42df9826865f0e6b9f81f804d9bcfe73b13f 100644 --- a/common/DistributeCalc/entry/src/main/js/default/common/calculator.js +++ b/common/DistributeCalc/entry/src/main/js/default/common/calculator.js @@ -22,24 +22,57 @@ const OperatorLevels = { const OperatorHandlers = { "+": (one, other) => one + other, "-": (one, other) => one - other, - "*": (one, other) => one * other, - "/": (one, other) => one / other, + "*": (one, other) => floatMultiply(one, other), + "/": (one, other) => floatDivide(one, other), }; +// 除,解决精度问题 +function floatDivide(arg1, arg2) { + var t1 = 0, t2 = 0, r1, r2; + try { + t1 = arg1.toString().split(".")[1].length + } catch (e) { + } //--小数点后的长度 + try { + t2 = arg2.toString().split(".")[1].length + } catch (e) { + } //--小数点后的长度 + r1 = Number(arg1.toString().replace(".", "")); + r2 = Number(arg2.toString().replace(".", "")); + return floatMultiply((r1 / r2), Math.pow(10, t2 - t1)); //---整数相除 在乘上10的小数点的长度差的次方 +} + +//乘,解决精度问题 +function floatMultiply(arg1, arg2) { + var m = 0, s1 = arg1.toString(), s2 = arg2.toString(); + try { + m += s1.split(".")[1].length + } catch (e) { + } + try { + m += s2.split(".")[1].length + } catch (e) { + } + return (Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)); //整数相乘,再除以10的小数点长度的次方 +} + function calcSuffixExpression(expression) { const numberStack = []; while (expression.length) { const element = expression.shift(); if (!isOperator(element)) { + console.info('element=' + element) numberStack.push(Number(element)); } else { + console.info('numberStack=' + numberStack) const one = numberStack.pop(); const other = numberStack.pop(); const result = OperatorHandlers[element](other, one); numberStack.push(result); } } + console.info('numberStack[0]=' + numberStack[0]) return numberStack[0]; }