金额小写转换为大写方法

// 金额小写转换为大写
export const money = (n) => {
    
    
    let cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'); //汉字的数字
    let cnIntRadice = new Array('', '拾', '佰', '仟'); //基本单位
    let cnIntUnits = new Array('', '万', '亿', '兆'); //对应整数部分扩展单位
    let cnDecUnits = new Array('角', '分', '毫', '厘'); //对应小数部分单位
    let cnInteger = '整'; // 整数金额时后面跟的字符
    let cnIntLast = '元'; // 整型完以后的单位
    let maxNum = 999999999999999.9999; // 最大处理的数字
    let IntegerNum; // 金额整数部分
    let DecimalNum; // 金额小数部分
    let ChineseStr = ''; // 输出的中文金额字符串
    let parts; // 分离金额后用的数组,预定义    
    let mark = ''; // 正负值标记
    if (n == '') {
    
    
        return '';
    }

    n = parseFloat(n);
    if (n >= maxNum) {
    
    
        alert('超出最大处理数字');
        return '';
    }
    if (n == 0) {
    
    
        ChineseStr = cnNums[0] + cnIntLast + cnInteger;
        return ChineseStr;
    }
    if (n < 0) {
    
    
        n = -n;
        mark = '负';
    }
    n = n.toString(); // 转换为字符串
    if (n.indexOf('.') == -1) {
    
    
        IntegerNum = n;
        DecimalNum = '';
    } else {
    
    
        parts = n.split('.');
        IntegerNum = parts[0];
        DecimalNum = parts[1].substr(0, 4);
    }
    if (parseInt(IntegerNum, 10) > 0) {
    
     // 获取整型部分转换
        let zeroCount = 0;
        let IntLen = IntegerNum.length;
        for (let i = 0; i < IntLen; i++) {
    
    
            let n = IntegerNum.substr(i, 1);
            let p = IntLen - i - 1;
            let q = p / 4;
            let m = p % 4;
            if (n == '0') {
    
    
                zeroCount++;
            }
            else {
    
    
                if (zeroCount > 0) {
    
    
                    ChineseStr += cnNums[0];
                }
                zeroCount = 0; //归零
                ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
            }
            if (m == 0 && zeroCount < 4) {
    
    
                ChineseStr += cnIntUnits[q];
            }
        }
        ChineseStr += cnIntLast;
        // 整型部分处理完毕
    }
    if (DecimalNum != '') {
    
     // 小数部分
        let decLen = DecimalNum.length;
        for (let i = 0; i < decLen; i++) {
    
    
            let n = DecimalNum.substr(i, 1);
            if (n != '0') {
    
    
                ChineseStr += cnNums[Number(n)] + cnDecUnits[i];
            }
        }
    }
    if (ChineseStr == '') {
    
    
        ChineseStr += cnNums[0] + cnIntLast + cnInteger;
    } else if (DecimalNum == '') {
    
    
        ChineseStr += cnInteger;
    }
    ChineseStr = mark + ChineseStr;

    return ChineseStr;
}

猜你喜欢

转载自blog.csdn.net/Komorebi_00/article/details/131528566
今日推荐