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 相关文章推荐
广告显示判断
Aug 31 Javascript
JavaScript加密解密7种方法总结分析
Oct 07 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
May 10 Javascript
iframe子父页面调用js函数示例
Nov 07 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
Nov 20 Javascript
javascript 事件处理示例分享
Dec 31 Javascript
Jquery中map函数的用法
Jun 03 Javascript
Javascript 调用 ActionScript 的简单方法
Sep 22 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
Dec 09 Javascript
详解微信小程序用定时器实现倒计时效果
Apr 30 Javascript
浅谈Vue组件单元测试究竟测试什么
Feb 05 Javascript
详解JavaScript 异步编程
Jul 13 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
一个程序下载的管理程序(三)
2006/10/09 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
微信小程序实现滚动消息通知
2018/02/02 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
python中的reduce内建函数使用方法指南
2014/08/31 Python
改进Django中的表单的简单方法
2015/07/17 Python
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
python学习入门细节知识点
2018/03/29 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
python实现ip地址的包含关系判断
2020/02/07 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
暑假实习求职信范文
2013/09/22 职场文书
应用英语专业自荐信
2014/01/26 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
初婚初育证明范本
2014/11/24 职场文书
2014司机年终工作总结
2014/12/05 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server