js实现完美兼容各大浏览器的人民币大小写相互转换


Posted in Javascript onOctober 29, 2015

/*小写转大写*/

var xcc= "12.22";
document.write(xcc+"=>"+formatRMB(xcc)+"<br/>");

/*大写转小写*/

var rrrr = "壹拾贰元贰角贰分";
document.write(rrrr+"=>"+parseRMB(rrrr));

输出结果:
12.22=>壹拾贰元贰角贰分
壹拾贰元贰角贰分=>12.22

我们来看下具体实例

var c = "零壹贰叁肆伍陆柒捌玖".split("");
// ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"]
var _c = {}; // 反向对应关系
for ( var i = 0; i < c.length; i++) {
  _c[c[i]] = i;
};
 
var d = "元***万***亿***万";
var e = ",拾,佰,仟".split(",");
function unit4(arr) {
  var str = "", i = 0;
  while (arr.length) {
    var t = arr.pop();
    str = (c[t] + (t == 0 ? "" : e[i])) + str;
    i++;
  }
 
  str = str.replace(/[零]{2,}/g, "零");
 
  str = str.replace(/^[零]/, "");
  str = str.replace(/[零]$/, "");
  if (str.indexOf("零") == 0) {
    str = str.substring(1);
  }
  if (str.lastIndexOf("零") == str.length - 1) {
    str = str.substring(0, str.length - 1);
  }
 
  return str;
}
function _formatD(a) {
  // 转化整数部分
  var arr = a.split(""), i = 0, result = "";
  while (arr.length) {
    var arr1 = arr.splice(-4, 4);
 
    var dw = d.charAt(i), unit = unit4(arr1);
 
    if (dw == '万' && !unit) {
      dw = "";
    }
    result = unit + dw + result;
    i += 4;
  }
  return result == "元" ? "" : result;
}
function _formatF(b){
   // 转化小数部分
  b = b || "";
  switch (b.length) {
  case 0:
    return "整";
  case 1:
    return c[b] + "角";
  default:
    return c[b.charAt(0)] + "角" + c[b.charAt(1)] + "分";
  }
}
function _format(n){
  var a = ("" + n).split("."), a0 = a[0], a1 = a[1];
  return _formatD(a0) + _formatF(a1);
}
 
function parse4(u4){
  var res = 0;
  while (t = /([零壹贰叁肆伍陆柒捌玖])([拾佰仟]?)/g.exec(u4)) {
    var n = _c[t[1]], d = {
      "" : 1,
      "拾" : 10,
      "佰" : 100,
      "仟" : 1000
    }[t[2]];
    res += n * d;
    u4 = u4.replace(t[0], "");
  }
  var result = ("0000" + res);
  return result.substring(result.length - 4);
}
function _parseD(d) {
  var arr = d.replace(/[零]/g, "").split(/[万亿]/), rs = "";
  for ( var i = 0; i < arr.length; i++) {
    rs += parse4(arr[i]);
  }
  ;
  return rs.replace(/^[0]+/, "");
};
function _parseF(f) {
  var res = "", t = f.replace(/[^零壹贰叁肆伍陆柒捌玖]+/g, "").split(""); // 去掉单位
  if (t.length) {
    res = ".";
  } else {
    return "";
  }
  ;
  for ( var i = 0; (i < t.length && i < 2); i++) {
    res += _c[t[i]];
  }
  ;
  return res;
};
function _parse(rmb) {
  var a = rmb.split("元"), a1 = a[1], a0 = a[0];
  if (a.length == 1) {
    a1 = a0;
    a0 = "";
  }
  return _parseD(a0) + _parseF(a1);
 
};
//小写转大写
function formatRMB(num){
  var n = Number(num);
  if(!isNaN(num)){
    if(num == 0){
      return "零元整";
    }else{
      return _format(n);
    }
  }else {
    return false;
  }
}
//大写转小写
function parseRMB(rmb) {
  if (/^[零壹贰叁肆伍陆柒捌玖元万亿拾佰仟角分整]{2,}$/.test(rmb)) {
    var result = _parse(rmb);
    return rmb == this.formatRMB(result) ? result : result + "(?)";
  } else {
    return false;
  }
};
/*小写转大写*/
var xcc= "12.22";
document.write(xcc+"=>"+formatRMB(xcc)+"<br/>");
 
/*大写转小写*/
var rrrr = "壹拾贰元贰角贰分";
document.write(rrrr+"=>"+parseRMB(rrrr));

再来看一个将RMB转化为大写的例子

//人民币金额转大写程序 JavaScript版
  //CopyRight Bardo QI
  function numToCny(num){
  var capUnit = ['万','亿','万','圆',''];
  var capDigit = { 2:['角','分',''], 4:['仟','佰','拾','']};
  var capNum=['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'];
  if (((num.toString()).indexOf('.') > 16)||(isNaN(num)))
  return '';
  num = (Math.round(num*100)/100).toString();
  num =((Math.pow(10,19-num.length)).toString()).substring(1)+num;
  var i,ret,j,nodeNum,k,subret,len,subChr,CurChr=[];
  for (i=0,ret='';i<5;i++,j=i*4+Math.floor(i/4)){
  nodeNum=num.substring(j,j+4);
  for(k=0,subret='',len=nodeNum.length;((k
  CurChr[k%2] = capNum[nodeNum.charAt(k)]+((nodeNum.charAt(k)==0)?'':capDigit[len][k]);
  if (!((CurChr[0]==CurChr[1]) && (CurChr[0]==capNum[0])))
  if(!((CurChr[k%2] == capNum[0]) && (subret=='') && (ret=='')))
  subret += CurChr[k%2];
  }
  subChr = subret + ((subret=='')?'':capUnit[i]);
  if(!((subChr == capNum[0]) && (ret=='')))
  ret += subChr;
  }
  ret=(ret=='')? capNum[0]+capUnit[3]: ret;
  return ret;
  }
Javascript 相关文章推荐
使用onbeforeunload属性后的副作用
Mar 08 Javascript
js跟随滚动条滚动浮动代码
Dec 31 Javascript
JavaScript计时器示例分析
Feb 05 Javascript
jquery插件pagination实现无刷新ajax分页
Sep 30 Javascript
javascript每日必学之继承
Feb 23 Javascript
jQuery动态改变多行文本框高度的方法
Sep 07 Javascript
javascript实现页面滚屏效果
Jan 17 Javascript
详解jQuery中ajax.load()方法
Jan 25 Javascript
js实现时间轴自动排列效果
Mar 09 Javascript
想用好React的你必须要知道的一些事情
Jul 24 Javascript
JavaScript取得gridview中获取checkbox选中的值
Jul 24 Javascript
vue-cli系列之vue-cli-service整体架构浅析
Jan 14 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
Oct 28 #Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
Oct 28 #Javascript
自己动手写的jquery分页控件(非常简单实用)
Oct 28 #Javascript
Jquery日历插件制作简单日历
Oct 28 #Javascript
使用CoffeeScrip优美方式编写javascript代码
Oct 28 #Javascript
开启Javascript中apply、call、bind的用法之旅模式
Oct 28 #Javascript
JavaScript多并发问题如何处理
Oct 28 #Javascript
You might like
广播爱好者需要了解的天线知识
2021/03/01 无线电
用PHP调用Oracle存储过程
2006/10/09 PHP
PHP引用返回用法示例
2016/05/28 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中创建二维数组
2018/10/17 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
制药工程专业职业生涯规划范文
2014/03/10 职场文书
工作自我推荐信范文
2015/03/25 职场文书
爱国主义电影观后感
2015/06/18 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python