简介
Decimal.js 是一个用于 JavaScript 的精确数学运算库,主要解决 JavaScript 原生浮点数运算的精度问题。
这里封装一个通用方法便于各个前端项目使用。
当前所用版本:"decimal.js": "^10.6.0"
代码
import Decimal from 'decimal.js';
export const tools = {
// 当前是是否为空值
isNUll(val: any) {
return val === null || val === void 0 || val === '' || val.toString() === 'NaN';
},
/**
* 数值保留小数处理
* @param value 数值
* @param decimals 小数位数
* @param mode 处理方式 ceil:向上取整 floor:向下取整 round:四舍五入 【有精度时是先放大 - 再取整或者四舍五入 - 再缩小】
* @returns
*/
roundTo(value: number | string, decimals: number, mode: 'round' | 'ceil' | 'floor' = 'round') {
if (tools.isNUll(value)) return '';
try {
const decimalValue = new Decimal(value.toString());
const factor = new Decimal(10).pow(decimals || 0);
let result: Decimal;
if (mode === 'ceil') {
result = decimalValue.mul(factor).ceil().div(factor);
} else if (mode === 'floor') {
result = decimalValue.mul(factor).floor().div(factor);
} else {
result = decimalValue.mul(factor).round().div(factor);
}
if (tools.isNUll(decimals)) {
return result.toString();
}
// 格式化为字符串,避免科学计数法
return result.toFixed(decimals);
} catch (e) {
console.warn('数值保留小数处理错误:', value, decimals, mode, e);
return '';
}
},
}