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


Posted in Javascript onJune 12, 2016

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

  • 每个计数数字都跟着一个权位,权位有:十、百、千、万、亿。
  • 以“万”为小节,对应一个节权位,万以下没有节权位。
  • 每个小节内部以“十百千”为权位独立计数。
  • “十百千”不能连续出现,而“万”和“亿”作为节权位时可以和其他权位连用,如:“二十亿”。

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

  • 以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;
}
Javascript 相关文章推荐
网页禁用右键实现代码(JavaScript代码)
Oct 29 Javascript
jquery 插件开发备注
Aug 27 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
Sep 21 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
Dec 03 Javascript
jQuery实现图片向左向右切换效果的简单实例
May 18 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
Jun 12 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
Dec 14 Javascript
js上下视差滚动简单实现代码
Mar 07 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
Oct 11 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
Aug 01 Javascript
JavaScript Blob对象原理及用法详解
Oct 14 Javascript
canvas绘制折线路径动画实现
May 12 Javascript
深入解析JavaScript中的arguments对象
Jun 12 #Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
Jun 12 #Javascript
JS弹出窗口插件zDialog简单用法示例
Jun 12 #Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 #Javascript
仅一个form表单 js实现注册信息依次填写提交功能
Jun 12 #Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
Jun 12 #Javascript
浅谈如何实现easyui的datebox格式化
Jun 12 #Javascript
You might like
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
基于PHP文件操作的详细诠释
2013/06/21 PHP
php中JSON的使用方法
2015/04/30 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
python虚拟环境完美部署教程
2019/08/06 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
公司寄语大全
2014/04/10 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
高考升学宴答谢词
2015/01/20 职场文书
2019年教师入党申请书
2019/06/27 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript