// 优化后的工具文件 utils/PrecisionHandler.js import Decimal from 'decimal.js'; // 关键:设置足够高的精度并禁止自动转换为数字 Decimal.set({ precision: 30, toExpNeg: -999, // 避免小数字自动转为科学计数法 toExpPos: 999 // 避免大数字自动转为科学计数法 }); export default { // 确保输入是字符串类型以保留完整精度 toDecimal(num) { // 如果是数字先转为字符串,避免精度丢失 if (typeof num === 'number') { num = num.toString(); } return new Decimal(num); }, // 加法 add(num1, num2) { return this.toDecimal(num1).plus(this.toDecimal(num2)); }, // 减法 subtract(num1, num2) { return this.toDecimal(num1).minus(this.toDecimal(num2)); }, // 乘法 multiply(num1, num2) { return this.toDecimal(num1).times(this.toDecimal(num2)); }, // 除法 divide(num1, num2) { return this.toDecimal(num1).dividedBy(this.toDecimal(num2)); }, // 四舍五入保留指定小数位(返回字符串,避免转换丢失) round(num, decimalPlaces = 2) { return this.toDecimal(num).toFixed(decimalPlaces); }, // 转换为数字(仅在确定不会丢失精度时使用) toNumber(decimal) { return decimal.toNumber(); } };