JS实现金额由阿拉伯数字转换为中文大写

JS实现金额由阿拉伯数字转换为中文大写

我是使用vue写了一个过滤器,代码如下
const change =  function (money) {
      //汉字的数字
      var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
      //基本单位
     var cnIntRadice = new Array('', '拾', '佰', '仟');
     //对应整数部分扩展单位
     var cnIntUnits = new Array('', '万', '亿', '兆');
     //对应小数部分单位
     var cnDecUnits = new Array('角', '分', '毫', '厘');
     //整数金额时后面跟的字符
     var cnInteger = '整';
     //整型完以后的单位
     var cnIntLast = '元';
     //最大处理的数字
     var maxNum = 999999999999999.9999;
     //金额整数部分
     var integerNum;
     //金额小数部分
     var decimalNum;
     //输出的中文金额字符串
     var chineseStr = '';
     //分离金额后用的数组,预定义
     var parts;
 
     if (money == '') { return ''; }
 
     money = parseFloat(money);
     if (money >= maxNum) {
         //超出最大处理数字
         return '';
     }
     if (money == 0) {
         chineseStr = cnNums[0] + cnIntLast + cnInteger;
         return chineseStr;
     }
 
     //转换为字符串
     money = money.toString();
     if (money.indexOf('.') == -1) {
         integerNum = money;
         decimalNum = '';
     } else {
         parts = money.split('.');
         integerNum = parts[0];
         decimalNum = parts[1].substr(0, 4);
     }
 
     //获取整型部分转换
     if (parseInt(integerNum, 10) > 0) {
         var zeroCount = 0;
         var IntLen = integerNum.length;
         for (var i = 0; i < IntLen; i++) {
             var n = integerNum.substr(i, 1);
             var p = IntLen - i - 1;
             var q = p / 4;
             var 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 != '') {
         var decLen = decimalNum.length;
         for (var i = 0; i < decLen; i++) {
             var 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;
     }
 
     return chineseStr;
 }
 	//这是过滤器注册,可忽略,上面的方法足以
    Vue.filter('money',change)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值