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 判断客户端浏览器类型代码
Mar 01 Javascript
JavaScript和CSS通过expression实现Table居中显示
Jun 28 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
Aug 21 Javascript
js实现图片和链接文字同步切换特效的方法
Feb 20 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
Mar 18 Javascript
分享9点个人认为比较重要的javascript 编程技巧
Apr 27 Javascript
七夕情人节丘比特射箭小游戏
Aug 20 Javascript
js带点自动图片轮播幻灯片特效代码分享
Sep 07 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
Nov 11 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 Javascript
webpack实用小功能介绍
Jan 02 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
Aug 12 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面向对象——访问修饰符介绍
2012/11/08 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
利用python循环创建多个文件的方法
2018/10/25 Python
pyshp创建shp点文件的方法
2018/12/31 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
如何使用python进行pdf文件分割
2019/11/11 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
python 实现表情识别
2020/11/21 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
浅谈amaze-ui中datepicker和datetimepicker注意的几点
2020/08/21 HTML / CSS
商务英语专业自荐信
2013/10/14 职场文书
少年闰土教学反思
2014/02/22 职场文书
大型营销活动计划书
2014/04/28 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
阿里云服务器Ubuntu 20.04上安装Odoo 15
2022/05/20 Servers