JS中金额转换以及格式化Vue过滤器

JS中金额转换以及格式化

- 为数字加上单位:万或亿

import Vue from 'vue'
/** 
     * 为数字加上单位:万或亿 
     * 
     * 例如: 
     * 1000.01 => 1000.01 
     * 10000 => 1万 
     * 99000 => 9.9万 
     * 566000 => 56.6万 
     * 5660000 => 566万 
     * 44440000 => 4444万 
     * 11111000 => 1111.1万 
     * 444400000 => 4.44亿 
     * 40000000,00000000,00000000 => 4000万亿亿 
     * 4,00000000,00000000,00000000 => 4亿亿亿 
     * 
     * @param {number} number 输入数字. 
     * @param {number} decimalDigit 小数点后最多位数,默认为2 
     * @return {string} 加上单位后的数字 
     */
export function getDigit(integer) {
    var digit = -1;
    while (integer >= 1) {
        digit++;
        integer = integer / 10;
    }
    return digit;
}

export function addWan(integer, number, mutiple, decimalDigit) {
    // var me = this;
    // var digit = me.getDigit(integer);

    var digit = getDigit(integer);

    if (digit > 3) {
        var remainder = digit % 8;
        if (remainder >= 5) { // ‘十万’、‘百万’、‘千万’显示为‘万’ 
            remainder = 4;
        }
        return Math.round(number / Math.pow(10, remainder + mutiple - decimalDigit)) / Math.pow(10, decimalDigit) + '万';
    } else {
        return Math.round(number / Math.pow(10, mutiple - decimalDigit)) / Math.pow(10, decimalDigit);
    }
}

export function addChineseUnit(number, decimalDigit) {
    // var me = this;
    decimalDigit = decimalDigit == null ? 2 : decimalDigit;



    var integer = Math.floor(number);
    console.log(integer);    
    // var digit = me.getDigit(integer);

    var digit = getDigit(integer);
    // ['个', '十', '百', '千', '万', '十万', '百万', '千万']; 
    var unit = [];
    if (digit > 3) {
        var multiple = Math.floor(digit / 8);
        if (multiple >= 1) {
            var tmp = Math.round(integer / Math.pow(10, 8 * multiple));
            // unit.push(me.addWan(tmp, number, 8 * multiple, decimalDigit));

            unit.push(addWan(tmp, number, 8 * multiple, decimalDigit));

            for (var i = 0; i < multiple; i++) {
                unit.push('亿');
            }
            return unit.join('');
        } else {
            // return me.addWan(integer, number, 0, decimalDigit);
            return addWan(integer, number, 0, decimalDigit);

        }
    } else {
        return number;
    }
}

let filters = {
    getDigit,
    addWan,
    addChineseUnit
}

Object.keys(filters).forEach(key => {
    Vue.filter(key, filters[key])
})
export default filters

- JS 格式化金钱单位并带上 K、M等单位

import Vue from 'vue'
export function addChineseUnit(num, digits) {
    digits = digits == null ? 2 : digits
    const si = [
        { value: 1, symbol: "" },
        { value: 1E3, symbol: "K" },
        { value: 1E6, symbol: "M" },
        { value: 1E9, symbol: "B" },
        { value: 1E12, symbol: "T" },
        { value: 1E15, symbol: "P" },
        { value: 1E18, symbol: "E" }
    ];
    const rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
    let i;
    for (i = si.length - 1; i > 0; i--) {
        if (num >= si[i].value) {
            break;
        }
    }
    if (num < 1000) {
        return Number(num).toFixed(digits)
    }    
    return (num / si[i].value).toFixed(digits).replace(rx, "$1") + si[i].symbol;
}
let filters = {
    addChineseUnit
}

Object.keys(filters).forEach(key => {
    Vue.filter(key, filters[key])
})
export default filters

【注】:正则真的很强大

发布了76 篇原创文章 · 获赞 6 · 访问量 3457

猜你喜欢

转载自blog.csdn.net/weixin_43550660/article/details/103952436