mofang-mopai-utils
Version:
Use it in Mopai system
90 lines (89 loc) • 3.52 kB
JavaScript
;
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;