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 相关文章推荐
解决IE6的PNG透明JS插件使用介绍
Apr 17 Javascript
jquery移动listbox的值原理及代码
May 03 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
May 27 Javascript
EasyUI中实现form表单提交的示例分享
Mar 01 Javascript
jQuery实现表格行上下移动和置顶效果
Jun 05 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
Jun 23 Javascript
JavaScript统计网站访问次数的实现代码
Nov 18 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
May 23 Javascript
js选项卡的制作方法
Jan 23 Javascript
jQuery实现选项卡功能(两种方法)
Mar 08 Javascript
了解JavaScript中的选择器
May 24 Javascript
vue+moment实现倒计时效果
Aug 26 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
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
JavaScript 学习笔记(十五)
2010/01/28 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
AngularJS 支付倒计时功能实现思路
2017/06/05 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
Python利用ansible分发处理任务
2015/08/04 Python
深入理解python中的atexit模块
2017/03/07 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
儿子满月酒致辞
2015/07/29 职场文书
Java并发编程之Executor接口的使用
2021/06/21 Java/Android
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记
Win11更新失败并提示0xc1900101
2022/04/19 数码科技