网络编程
位置:首页>> 网络编程>> JavaScript>> JavaScript实现阿拉伯数字和中文数字互相转换

JavaScript实现阿拉伯数字和中文数字互相转换

作者:zhoutk  发布时间:2024-11-05 17:58:09 

标签:JavaScript,数字

阿拉伯数字转中文数字
中文数字的特点:

  • 每个计数数字都跟着一个权位,权位有:十、百、千、万、亿。

  • 以“万”为小节,对应一个节权位,万以下没有节权位。

  • 每个小节内部以“十百千”为权位独立计数。

  • “十百千”不能连续出现,而“万”和“亿”作为节权位时可以和其他权位连用,如:“二十亿”。

中文数字对“零”的使用要满足以下三条规则:

  • 以10000为小节,小节的结尾即使是0,也不使用零。

  • 小节内两个非0数字之间要使用“零”。

  • 当小节的“千”位是0时(即:1~999),只要不是首小节,都要补“零”。

算法设计的一些说明:

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

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

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

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

节内转换算法:


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;
}

转换算法主函数:


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的位数。

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

  • 零直接忽略即可。

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


var chnNumChar = {
 零:0,
 一:1,
 二:2,
 三:3,
 四:4,
 五:5,
 六:6,
 七:7,
 八:8,
 九:9
};

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


var chnNameValue = {
 十:{value:10, secUnit:false},
 百:{value:100, secUnit:false},
 千:{value:1000, secUnit:false},
 万:{value:10000, secUnit:true},
 亿:{value:100000000, secUnit:true}
}

转换算法如下:


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;
}
0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com