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 相关文章推荐
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
Nov 27 Javascript
jquery 最简单易用的表单验证插件
Feb 27 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
Aug 02 Javascript
javascript中typeof的使用示例
Dec 19 Javascript
微信QQ的二维码登录原理js代码解析
Jun 23 Javascript
angular.JS实现网页禁用调试、复制和剪切
Mar 31 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
Apr 25 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
Nov 01 Javascript
npm 常用命令详解(小结)
Jan 17 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
Feb 18 Javascript
JavaScript布尔运算符原理使用解析
May 06 Javascript
利用JavaScript模拟京东按键输入功能
Dec 01 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
支持oicq头像的留言簿(一)
2006/10/09 PHP
PHP MVC模式在网站架构中的实现分析
2010/03/04 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
用javascript自动显示最后更新时间
2007/03/15 Javascript
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
对于Python的Django框架部署的一些建议
2015/04/09 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
python程序变成软件的实操方法
2019/06/24 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
庆中秋节主题活动方案
2014/02/03 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
保护环境标语
2014/06/09 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
Python中递归以及递归遍历目录详解
2021/10/24 Python