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 相关文章推荐
制作特殊字的脚本
Jun 26 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
Oct 27 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
Feb 19 Javascript
springMVC结合AjaxForm上传文件
Jul 12 Javascript
JavaScript计算器网页版实现代码分享
Jul 15 Javascript
node.js实现复制文本到剪切板的功能
Jan 23 Javascript
JS鼠标3次点击事件实现代码及扩展思路
Sep 12 Javascript
JavaScript自执行函数和jQuery扩展方法详解
Oct 27 jQuery
Bootstrap-table自定义可编辑每页显示记录数
Sep 07 Javascript
新手快速上手webpack4打包工具的使用详解
Jan 28 Javascript
node读写Excel操作实例分析
Nov 06 Javascript
extjs图表绘制之条形图实现方法分析
Mar 06 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
js 学习笔记(三)
2009/12/29 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
python多线程扫描端口示例
2014/01/16 Python
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
Python3实现连接SQLite数据库的方法
2014/08/23 Python
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
恒华伟业笔试面试题
2015/02/26 面试题
大专毕业生简历的自我评价
2013/10/20 职场文书
爱国演讲稿500字
2014/05/04 职场文书
民生工作实施方案
2014/05/31 职场文书
农村婚庆主持词
2015/06/29 职场文书