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 相关文章推荐
javascript下操作css的float属性的特殊写法
Aug 22 Javascript
jquery tools 系列 scrollable(2)
Sep 06 Javascript
新老版本juqery获取radio对象的方法
Mar 01 Javascript
jquery重新播放css动画所遇问题解决
Aug 21 Javascript
JavaScript中length属性的使用方法
Jun 05 Javascript
老生常谈JQuery data方法的使用
Sep 09 Javascript
javascript判断回文数详解及实现代码
Feb 03 Javascript
JS ES6多行字符串与连接字符串的表示方法
Apr 26 Javascript
JS实现微信里判断页面是否被分享成功的方法
Jun 06 Javascript
详解js加减乘除精确计算
Mar 19 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
Jun 21 Javascript
用vue设计一个日历表
Dec 03 Vue.js
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
MVC模式的PHP实现
2006/10/09 PHP
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python实现的归并排序算法示例
2017/11/21 Python
vscode 远程调试python的方法
2017/12/01 Python
Python切片操作深入详解
2018/07/27 Python
python验证码图片处理(二值化)
2019/11/01 Python
Python读取配置文件(config.ini)以及写入配置文件
2020/04/08 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
广州迈达威.net面试题目
2012/03/10 面试题
路政管理专业推荐信
2013/11/11 职场文书
英文简历中的自荐信范文
2013/12/14 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
售房委托书
2014/08/30 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
2014财务年终工作总结
2014/12/08 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
2015年入党积极分子评语
2015/03/26 职场文书
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js