JavaScript 实现阿拉伯数字和中文数字互相转换可以用数组的循环检测后的替换来实现, 下面主要讲解其中的一些核心算法:
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
阿拉伯数字转中文数字
中文数字的特点:
中文数字对 "零" 的使用要满足以下三条规则:
算法设计的一些说明:
节内转换算法:
- 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;
- }
中文数字转阿拉伯数字
设计思想:
中文数字转换成阿拉伯数字用如下对象实现:
- 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;
- }
来源: http://www.phperz.com/article/17/0302/264953.html