JavaScript实现阿拉伯数字和中文数字互相转换
算法设计的一些说明:
对“零”的第三个规则,把检测放在循环的最前面并默认为false,可以自然的丢弃最高小节的加零判断。
单个数字转换用数组实现,var chnNumChar = ["零","一","二","三","四","五","六","七","八","九"];
节权位同样用数组实现,var chnUnitSection = ["","万","亿","万亿","亿亿"];
节内权位同样用数组实现,var chnUnitChar = ["","十","百","千"];
JavaScript Code复制内容到剪贴板
- function SectionToChinese(section){
- var strIns = '', chnStr = '';
- var unitPos = 0;
- var zero = true;
- while(section > 0){
- var v = section % 10;
- if(v === 0){
- if(!zero){
- zero = true;
- chnStr = chnNumChar[v] + chnStr;
- }
- }else{
- zero = false;
- strIns = chnNumChar[v];
- strIns += chnUnitChar[unitPos];
- chnStr = strIns + chnStr;
- }
- unitPos++;
- section = Math.floor(section / 10);
- }
- return chnStr;
- }
转换算法主函数:
JavaScript Code复制内容到剪贴板
- function NumberToChinese(num){
- var unitPos = 0;
- var strIns = '', chnStr = '';
- var needZero = false;
- if(num === 0){
- return chnNumChar[0];
- }
- while(num > 0){
- var section = num % 10000;
- if(needZero){
- chnStr = chnNumChar[0] + chnStr;
- }
- strIns = SectionToChinese(section);
- strIns += (section !== 0) ? chnUnitSection[unitPos] : chnUnitSection[0];
- chnStr = strIns + chnStr;
- needZero = (section < 1000) && (section > 0);
- num = Math.floor(num / 10000);
- unitPos++;
- }
- return chnStr;
- }
设计思想:
将中文数学转换成阿拉伯数字。
将中文权位转换成10的位数。
对每个权位依次转换成位数并求和。
零直接忽略即可。
中文数字转换成阿拉伯数字用如下对象实现:
JavaScript Code复制内容到剪贴板
- var chnNumChar = {
- 零:0,
- 一:1,
- 二:2,
- 三:3,
- 四:4,
- 五:5,
- 六:6,
- 七:7,
- 八:8,
- 九:9
- };
中文权位转换成10的位数及节权标志用如下对象实现:
JavaScript Code复制内容到剪贴板
- function ChineseToNumber(chnStr){
- var rtn = 0;
- var section = 0;
- var number = 0;
- var secUnit = false;
- var str = chnStr.split('');
- for(var i = 0; i < str.length; i++){
- var num = chnNumChar[str[i]];
- if(typeof num !== 'undefined'){
- number = num;
- if(i === str.length - 1){
- section += number;
- }
- }else{
- var unit = chnNameValue[str[i]].value;
- secUnit = chnNameValue[str[i]].secUnit;
- if(secUnit){
- section = (section + number) * unit;
- rtn += section;
- section = 0;
- }else{
- section += (number * unit);
- }
- number = 0;
- }
- }
- return rtn + section;
- }
上一篇 媒体查询-手机尺寸参考
下一篇 JS去除字符串左右两端的空格