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进行拖拽
Jul 20 Javascript
jQuery UI 实现email输入提示实例
Aug 15 Javascript
js获取当前地址 JS获取当前URL的示例代码
Feb 26 Javascript
禁用页面部分JavaScript不是全部而是部分
Sep 03 Javascript
js图片轮播特效代码分享
Sep 07 Javascript
javascript适合移动端的日期时间拾取器
Nov 10 Javascript
js中用cssText设置css样式的简单方法
Sep 19 Javascript
使用JS模拟锚点跳转的实例
Feb 01 Javascript
详解extract-text-webpack-plugin 的使用及安装
Jun 12 Javascript
Vue+webpack+Element 兼容问题总结(小结)
Aug 16 Javascript
vue中设置、获取、删除cookie的方法
Sep 21 Javascript
vue下的@change事件的实现
Oct 25 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
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
跟老齐学Python之模块的加载
2014/10/24 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Python3.8中使用f-strings调试
2019/05/22 Python
原生python实现knn分类算法
2019/10/24 Python
Python通过文本和图片生成词云图
2020/05/21 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
彻底解决Python包下载慢问题
2020/11/15 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
文员个人求职自荐信
2013/09/21 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
离婚协议书范文
2015/01/26 职场文书
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python
Python中OpenCV实现查找轮廓的实例
2021/06/08 Python