基于 decimal.js 封裝通用的數(shù)字處理方法(向上向下取整、四舍五入)

簡介

Decimal.js 是一個用于 JavaScript 的精確數(shù)學(xué)運(yùn)算庫,主要解決 JavaScript 原生浮點(diǎn)數(shù)運(yùn)算的精度問題。

這里封裝一個通用方法便于各個前端項目使用。

當(dāng)前所用版本:"decimal.js": "^10.6.0"

代碼

import Decimal from 'decimal.js';
export const tools = {
    // 當(dāng)前是是否為空值
    isNUll(val: any) {
        return val === null || val === void 0 || val === '' || val.toString() === 'NaN';
    },
    /**
     * 數(shù)值保留小數(shù)處理
     * @param value 數(shù)值
     * @param decimals 小數(shù)位數(shù)
     * @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();
            }
            // 格式化為字符串,避免科學(xué)計數(shù)法
            return result.toFixed(decimals);
        } catch (e) {
            console.warn('數(shù)值保留小數(shù)處理錯誤:', value, decimals, mode, e);
            return '';
        }
    },
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容