UNPKG

mofang-mopai-utils

Version:

Use it in Mopai system

90 lines (89 loc) 3.52 kB
"use strict"; exports.__esModule = true; // 定义一个执行数学运算的函数,接收两个数字 a 和 b,以及一个操作符 method,返回运算结果 var execMath = function (a, b, method) { if (a === void 0) { a = 0; } if (b === void 0) { b = 0; } // 定义一个数组,包含所有支持的操作符 var validMethods = ['+', '-', '*', '/']; // 检查传入的操作符是否合法 if (!validMethods.includes(method)) { // 若操作符不合法,输出错误信息 console.error("\u4E0D\u652F\u6301\u7684\u64CD\u4F5C\u7B26: ".concat(method)); // 返回 0 return 0; } // 检查是否为除法操作且除数为零 if (method === '/' && b === 0) { // 若除数为零,输出错误信息 console.error('除数不能为零'); // 返回 0 return 0; } // 计算 a 和 b 中小数点后的最大位数 var decimalLength = Math.max(getDecimalLength(a), getDecimalLength(b)); // 将 a 转换为整数,补全小数点后的位数 var x = transformToInteger(a, decimalLength); // 补位后的a值 // 将 b 转换为整数,补全小数点后的位数 var y = transformToInteger(b, decimalLength); // 补位后的b值 // 计算补位的基数,用于后续的除法运算 var z = Math.pow(10, decimalLength); // 补位数 // 根据操作符执行相应的数学运算 switch (method) { // 加法操作 case '+': // 返回加法运算结果 return (x + y) / z; // 减法操作 case '-': // 返回减法运算结果 return (x - y) / z; // 乘法操作 case '*': // 返回乘法运算结果 return (x * y) / (z * z); // 除法操作 case '/': // 返回除法运算结果 return (x / y) * z; // 默认情况,处理不合法的操作符 default: // 返回 0 return 0; } }; // 计算一个数字或字符串表示的数字的小数点后的位数 var getDecimalLength = function (num) { // 若传入的是字符串,尝试将其转换为数字 if (typeof num === 'string') { try { // 将字符串转换为浮点数 num = parseFloat(num); } catch (error) { // 若转换失败,输出错误信息 console.error("\u65E0\u6CD5\u5C06\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u6570\u5B57: ".concat(num)); // 返回 0 return 0; } } // 将数字转换为字符串 var numStr = num.toString(); // 查找小数点的位置 var decimalIndex = numStr.indexOf('.'); // 若不存在小数点,返回 0;否则返回小数点后的位数 return decimalIndex === -1 ? 0 : numStr.length - decimalIndex - 1; }; // 将一个数字转换为整数,补全指定的小数位数 var transformToInteger = function (num, offset) { // 将数字转换为字符串 var numStr = num.toString(); // 分割整数部分和小数部分 var _a = numStr.split('.'), integerPart = _a[0], _b = _a[1], decimalPart = _b === void 0 ? '' : _b; // 补全小数部分的位数 var paddedDecimal = decimalPart.padEnd(offset, '0'); // 将整数部分和补全后的小数部分拼接,并转换为整数 return parseInt(integerPart + paddedDecimal, 10); }; // 导出 execMath 函数作为默认导出 exports["default"] = execMath;