Daily Code 金额转换-JS

385 阅读1分钟

金额小写转大写

handleSmallToCapitalize(price) {
            let fraction = ['角', '分'];
            let digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
            let unit = [['圆', '万', '亿'], ['', '拾', '佰', '仟']];
            let head = price < 0 ? '欠' : '';
            price = Math.abs(price);
            let upper = '';
            for (let i = 0; i < fraction.length; i++) {
                upper += (digit[Math.floor(price * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
            }
            upper = upper || '整';
            price = Math.floor(price);
            for (let i = 0; i < unit[0].length && price > 0; i++) {
                let p = '';
                for (let j = 0; j < unit[1].length && price > 0; j++) {
                    p = digit[price % 10] + unit[1][j] + p;
                    price = Math.floor(price / 10);
                }
                upper = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + upper;
            }
            return head + upper.replace(/(零.)*零圆/, '圆').replace(/(零.)+/g, '零').replace(/^整$/, '零圆整').replace('.', '')
        }

格式化输出货币

/**
 * 格式化输出货币
 *   number 数值
 *   places 保留的小数位数
 *   symbol 前缀
 *   thousand 千分位分隔符
 *   decimal 小数点位分隔符
 *   suffix 后缀
 **/
export const fmtCurrency = (number, places, symbol, thousand, decimal, suffix) => {
    number = number || 0;
    //保留的小位数 可以写成 formatMoney(542986,3) 后面的是保留的小位数,否则默 认保留两位
    places = !isNaN(places = Math.abs(places)) ? places : 2;
    //symbol表示前面表示的标志是¥ 可以写成 formatMoney(542986,2,"$")
    symbol = symbol !== undefined ? symbol : "¥";
    //thousand表示每几位用,隔开,是货币标识
    thousand = thousand || ",";
    //decimal表示小数点
    decimal = decimal || ".";
    //negative表示如果钱是负数有就显示“-”如果不是负数 就不显示负号
    let negative = number < 0 ? "-" : "";
    //i表示处理过的数值整数部分
    let i = parseInt(number = Math.abs(number || 0).toFixed(places), 10) + "";
    //后缀
    suffix = suffix || '';
    return symbol + negative +
        i.replace(/\d{1,3}(?=(\d{3})+$)/g, '$&' + thousand) +
        (places ? decimal + Math.abs(number - i).toFixed(places).slice(2) : "") +
        suffix;
};

承接上文,格式化输出金额

/**
 * 格式化输出金额
 * @param number
 * @returns {*}
 * @constructor
 */
export const fmtMoney = (number) => {
    return fmtCurrency(number, 2, '', ',', '.', ' 元');
};