使用JS将数字金额转为大写的人民币

1217人浏览 / 0人评论 / 添加收藏

如何将数字金额转为大写人民币?

一点思路

  1. 封装方法
  2. 列出大写人民币的所需的单位
  3. 设置最大处理数 和 最小处理数
  4. 参数情况处理,比如:参数为 空字符串,为0,为字符串,有小数,无小数等。

 代码如下:

function convertCurrency(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 ''
   }
   // 传入的参数为0情况 
   if(money == 0) {
       chineseStr = cnNums[0] + cnIntLast + cnInteger;
       return chineseStr
   }
   // 转为字符串
   money = money.toString();
   // indexOf 检测某字符在字符串中首次出现的位置 返回索引值(从0 开始) -1 代表无
   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){
       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;
   }

   return chineseStr
}

测试验证如下:

console.log(convertCurrency(345.44998)); // 叁佰肆拾伍元肆角肆分玖毫玖厘

全部评论