JavaScript实现阿拉伯数字和中文数字互相转换
前端笔记 2017-11-30 15:25:29

 算法设计的一些说明:

对“零”的第三个规则,把检测放在循环的最前面并默认为false,可以自然的丢弃最高小节的加零判断。

单个数字转换用数组实现,var chnNumChar = ["零","一","二","三","四","五","六","七","八","九"];

节权位同样用数组实现,var chnUnitSection = ["","万","亿","万亿","亿亿"];

节内权位同样用数组实现,var chnUnitChar = ["","十","百","千"];

JavaScript Code复制内容到剪贴板
  1. function SectionToChinese(section){  
  2.   var strIns = '', chnStr = '';  
  3.   var unitPos = 0;  
  4.   var zero = true;  
  5.   while(section > 0){  
  6.     var v = section % 10;  
  7.     if(v === 0){  
  8.       if(!zero){  
  9.         zero = true;  
  10.         chnStr = chnNumChar[v] + chnStr;  
  11.       }  
  12.     }else{  
  13.       zero = false;  
  14.       strIns = chnNumChar[v];  
  15.       strIns += chnUnitChar[unitPos];  
  16.       chnStr = strIns + chnStr;  
  17.     }  
  18.     unitPos++;  
  19.     section = Math.floor(section / 10);  
  20.   }  
  21.   return chnStr;  
  22. }  

 

转换算法主函数:

JavaScript Code复制内容到剪贴板
  1. function NumberToChinese(num){  
  2.   var unitPos = 0;  
  3.   var strIns = '', chnStr = '';  
  4.   var needZero = false;  
  5.    
  6.   if(num === 0){  
  7.     return chnNumChar[0];  
  8.   }  
  9.    
  10.   while(num > 0){  
  11.     var section = num % 10000;  
  12.     if(needZero){  
  13.       chnStr = chnNumChar[0] + chnStr;  
  14.     }  
  15.     strIns = SectionToChinese(section);  
  16.     strIns += (section !== 0) ? chnUnitSection[unitPos] : chnUnitSection[0];  
  17.     chnStr = strIns + chnStr;  
  18.     needZero = (section < 1000) && (section > 0);  
  19.     num = Math.floor(num / 10000);  
  20.     unitPos++;  
  21.   }  
  22.    
  23.   return chnStr;  
  24. }  

 

设计思想:

将中文数学转换成阿拉伯数字。

将中文权位转换成10的位数。

对每个权位依次转换成位数并求和。

零直接忽略即可。

中文数字转换成阿拉伯数字用如下对象实现:
 

JavaScript Code复制内容到剪贴板
  1. var chnNumChar = {  
  2.   零:0,  
  3.   一:1,  
  4.   二:2,  
  5.   三:3,  
  6.   四:4,  
  7.   五:5,  
  8.   六:6,  
  9.   七:7,  
  10.   八:8,  
  11.   九:9  
  12. };  

中文权位转换成10的位数及节权标志用如下对象实现:

JavaScript Code复制内容到剪贴板
  1. function ChineseToNumber(chnStr){  
  2.   var rtn = 0;  
  3.   var section = 0;  
  4.   var number = 0;  
  5.   var secUnit = false;  
  6.   var str = chnStr.split('');  
  7.    
  8.   for(var i = 0; i < str.length; i++){  
  9.     var num = chnNumChar[str[i]];  
  10.     if(typeof num !== 'undefined'){  
  11.       number = num;  
  12.       if(i === str.length - 1){  
  13.         section += number;  
  14.       }  
  15.     }else{  
  16.       var unit = chnNameValue[str[i]].value;  
  17.       secUnit = chnNameValue[str[i]].secUnit;  
  18.       if(secUnit){  
  19.         section = (section + number) * unit;  
  20.         rtn += section;  
  21.         section = 0;  
  22.       }else{  
  23.         section += (number * unit);  
  24.       }  
  25.       number = 0;  
  26.     }  
  27.   }  
  28.   return rtn + section;  
  29. }  

 

 

 

 

 

 

本文来自于:http://www.yoyo88.cn/note/frontend/243.html

Powered by yoyo苏ICP备15045725号