function computeNumber(a, type, b) {
function getDecimalLength(n) {
const decimal = n.toString().split(".")[1];
return decimal ? decimal.length : 0;
}
const amend = (n, precision = 15) => parseFloat(Number(n).toPrecision(precision));
const power = Math.pow(10, Math.max(getDecimalLength(a), getDecimalLength(b)));
let result = 0;
a = amend(a * power);
b = amend(b * power);
switch (type) {
case "+":
result = (a + b) / power;
break;
case "-":
result = (a - b) / power;
break;
case "*":
result = (a * b) / (power * power);
break;
case "/":
result = a / b;
break;
}
result = amend(result);
return {
result,
next(nextType, nextValue) {
return computeNumber(result, nextType, nextValue);
}
}
}
console.log(computeNumber('84.79', "-", '59.36').next("-", '35.43').result);
console.log(computeNumber(269.14, "-", 84.56).next("-", 184.58).result);
console