bonus-ui/src/utils/PrecisionHandler.js

51 lines
1.3 KiB
JavaScript
Raw Normal View History

// 优化后的工具文件 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();
}
};