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 相关文章推荐
修改发贴的编辑功能
Mar 07 Javascript
Javascript事件热键兼容ie|firefox
Dec 30 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
Apr 25 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
Aug 06 Javascript
jtable列中自定义button示例代码
Nov 21 Javascript
JavaScript中获取鼠标位置相关属性总结
Oct 11 Javascript
jquery实现Ctrl+Enter提交表单的方法
Jul 21 Javascript
Select下拉框模糊查询功能实现代码
Jul 22 Javascript
jQuery 实现图片的依次加载图片功能
Jul 06 jQuery
实时监控input框,实现输入框与下拉框联动的实例
Jan 23 Javascript
angularjs实现的购物金额计算工具示例
May 08 Javascript
JS实现数组删除指定元素功能示例
Jun 05 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
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
php写的AES加密解密类分享
2014/06/20 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
js函数般调用正则
2008/04/08 Javascript
用js解决数字不能换行问题
2010/08/10 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
Python函数式编程指南(四):生成器详解
2015/06/24 Python
python图片验证码生成代码
2016/07/02 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
就业推荐自我鉴定
2013/10/06 职场文书
董事长岗位职责
2013/11/30 职场文书
绩效管理实施方案
2014/03/19 职场文书
三八妇女节慰问信
2015/02/14 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
MongoDB使用场景总结
2022/02/24 MongoDB
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫
尝试使用Python爬取城市租房信息
2022/04/12 Python
Java的Object类的九种方法
2022/04/13 Java/Android