JS将阿拉伯数字转为中文书写

  1. var _change = {  
  2.     // 数字与中文映射  
  3.     ary0:["零""一""二""三""四""五""六""七""八""九"],  
  4.     // 每四位以内的单位  
  5.     ary1:["""十""百""千"],  
  6.     // 四位以上的单位  
  7.     ary2:["""万""亿""兆"],  
  8.     init:function (name) {  
  9.         this.name = name;  
  10.     },  
  11.     strrev:function () {  
  12.         var ary = [];  
  13.         for (var i = this.name.length; i >= 0; i--) {  
  14.             ary.push(this.name[i]);  
  15.         }  
  16.         return ary.join("");  
  17.     }, //倒转字符串。  
  18.     isUnit: function(ary) {  
  19.         var retVal = false;  
  20.         var cur = ary[0];  
  21.         if(this.ary2.indexOf(cur) > 0) {  
  22.             retVal = true;  
  23.         }  
  24.         return retVal;  
  25.     },// 检查是否时ary2中的单位  
  26.     pri_ary:function () {  
  27.         var $this = this;  
  28.         // 反转后再逐位处理  
  29.         var ary = this.strrev();  
  30.         // 是否读零  
  31.         var zero = "";  
  32.         // 缓存结果  
  33.         var newary = "";  
  34.         // 万级单位数组索引  
  35.         var i4 = -1;  
  36.         for (var i = 0; i < ary.length; i++) {  
  37.             // 首先判断万级单位,每隔四个字符就让万级单位数组索引号递增  
  38.             if (i % 4 == 0) {  
  39.                 i4++;  
  40.                 // 将万级单位存入该字符的读法中去,它肯定是放在当前字符读法的末尾,所以首先将它叠加入$r中,  
  41.                 newary = this.ary2[i4] + newary;  
  42.                 // 在万级单位位置的“0”肯定是不用的读的,所以设置零的读法为空  
  43.                 zero = "";  
  44.             }  
  45.             //关于0的处理与判断。  
  46.             //如果读出的字符是“0”,执行如下判断这个“0”是否读作“零”  
  47.             if (ary[i] == '0') {  
  48.                 switch (i % 4) {  
  49.                     case 0:  
  50.                         break;  
  51.                     // 如果位置索引能被4整除,表示它所处位置是万级单位位置,  
  52.                     // 这个位置的0的读法在前面就已经设置好了,所以这里直接跳过  
  53.                     case 1:  
  54.                     case 2:  
  55.                     case 3:  
  56.                         // 如果不被4整除,那么都执行这段判断代码:  
  57.                         // 如果它的下一位数字(针对当前字符串来说是上一个字符,因为之前执行了反转)也是0,  
  58.                         // 那么跳过,否则读作“零”  
  59.                         if (ary[i - 1] != '0') {  
  60.                             zero = "零";  
  61.                         }  
  62.                         break;  
  63.   
  64.                 }  
  65.   
  66.                 newary = zero + newary;  
  67.                 zero = '';  
  68.             }  
  69.             else {  
  70.                 // 如果不是“0”,就将该当字符转换成数值型,  
  71.                 // 并作为数组ary0的索引号,以得到与之对应的中文读法,  
  72.                 // 其后再跟上它的的一级单位(空、十、百还是千)最后再加上前面已存入的读法内容。  
  73.                 newary = this.ary0[parseInt(ary[i])] + this.ary1[i % 4] + newary;  
  74.             }  
  75.   
  76.         }  
  77.         // 用while处理最前面的零和单位(前面没有数字则不需要单位)  
  78.         while (newary.indexOf("零") == 0 || this.isUnit(newary)) {  
  79.             newary = newary.substr(1);  
  80.         }  
  81.         return newary;  
  82.     }  
  83. }  
  84.   
  85. //创建class类  
  86. function change() {  
  87.     this.init.apply(this, arguments);  
  88. }  
  89. change.prototype = _change;  
  90.   
  91. //创建实例  
  92. var k = new change("0000030010002040");  
  93. alert(k.pri_ary());  

你可能感兴趣的:(JS将阿拉伯数字转为中文书写)