基于 decimal.js 封装通用的数字处理方法(向上向下取整、四舍五入)

简介

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 '';
        }
    },
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容