金额小写转换为大写方法

// 金额小写转换为大写
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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Komorebi゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值