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中length属性的探索
Jul 31 Javascript
Jquery 一次处理多个ajax请求的代码
Sep 02 Javascript
php+js实现倒计时功能
Jun 02 Javascript
jQuery标签编辑插件Tagit使用指南
Apr 21 Javascript
JavaScript实现的经典文件树菜单效果
Sep 08 Javascript
JavaScript继承模式粗探
Jan 12 Javascript
JavaScript使用Ajax上传文件的示例代码
Aug 10 Javascript
微信小程序之前台循环数据绑定
Aug 18 Javascript
angular实现input输入监听的示例
Aug 31 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
Jun 18 jQuery
jQuery实现简单评论区功能
Oct 26 jQuery
js实现自定义滚动条的示例
Oct 27 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
Python中的filter()函数的用法
2015/04/27 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
python 有效的括号的实现代码示例
2019/11/11 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
python中turtle库的简单使用教程
2020/11/11 Python
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
2015年元旦标语大全
2014/12/09 职场文书
董事长秘书工作总结
2015/08/14 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
使用kubeadm命令行工具创建kubernetes集群
2022/03/31 Servers
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python