UDN-企业互联网技术人气社区

板块导航

浏览  : 540
回复  : 2

[原生js] 字符串金额转化为指定格式的货币格式

[复制链接]
芭芭拉的头像 楼主
发表于 2016-12-31 15:40:19 | 显示全部楼层 |阅读模式
  前言

  做金融项目的时候,接触的大量数字字符串往往需要格式化显示,这里我写了一个demo,将字符串金额格式化,可以保留小数位数,可以添加货币标识前缀。

  写在string的原型里面,需要格式化的时候直接格式化呗!

  例:'123345.23123'.moneyFormatter(2,'¥')

  输出: '¥123,345.23'

  demo有注释,我就不多做说明了

  我的demo
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Title</title>
  6. </head>
  7. <body>
  8. <script>
  9.     //金额格式转化
  10.     String.prototype.moneyFormatter = function(n,current){  //n为保留的小数点位数,不传则不处理,current为前面加上的货币符号,必须是字符串,例'
  11.   简介

  12.   接受两次参数,n和current,不传则不处理,如果要传入需要指定顺序传入,先传n,n为需要保留几位小数,再传current为如果要加上货币前缀就直接传入!

  13.   方法内部默认是标准金钱展现形式,3位一个',',就不再进行参数灵活控制了!
  14. ,'¥'
  15.         var moneyStr = this;
  16.         if(moneyStr.indexOf('.') == -1){  //如果不是小数
  17.             var len = moneyStr.length; //金额长度
  18.             var arr = []; //保存分割后的字符串
  19.             var num = Math.floor(len/3);//循环分割次数
  20.             var firstLen = len%3;
  21.             var firstStr = moneyStr.substr(0,firstLen); //分割的起始第一部分
  22.             if(firstStr.length > 0){
  23.                 arr.push(firstStr);
  24.             }
  25.             for(var i=0;i<num;i++){ //后续部分循环
  26.                 arr.push(moneyStr.substr(i*3+firstLen,3))
  27.             }
  28.             if(current && typeof(current) == 'string'){
  29.                 return current + arr.join(','); //返回格式化后的字符串
  30.             }else{
  31.                 return arr.join(','); //返回格式化后的字符串
  32.             }

  33.         }else{ //如果是小数
  34.             if(n){ //如果传入了需要保留的小数位数
  35.                 moneyStr = String(Number(moneyStr).toFixed(n))
  36.             }
  37.             var moneyStr1 = moneyStr.split('.')[0]; //金额整数部分
  38.             var moneyStr2 = moneyStr.split('.')[1]; //金额小数部分
  39.             var len1 = moneyStr1.length; //金额整数部分长度
  40.             var arr1 = []; //保存整数部分分割后的字符串
  41.             var num1 = Math.floor(len1/3);//循环分割次数
  42.             var firstLen1 = len1%3;
  43.             var firstStr1 = moneyStr.substr(0,firstLen1); //分割的起始第一部分
  44.             if(firstStr1.length > 0){
  45.                 arr1.push(firstStr1);
  46.             }
  47.             for(var i=0;i<num1;i++){ //后续部分循环
  48.                 arr1.push(moneyStr1.substr(i*3+firstLen,3))
  49.             }
  50.             var newMoneyStr1 = arr1.join(',');
  51.             //整数部分处理完毕
  52.             if(current && typeof(current) == 'string'){
  53.                 return current + newMoneyStr1+'.'+moneyStr2; //返回格式化后的字符串
  54.             }else{
  55.                 return newMoneyStr1+'.'+moneyStr2; //返回格式化后的字符串
  56.             }
  57.         }
  58.     }
  59. </script>
  60. </body>
  61. </html>
复制代码

  简介

  接受两次参数,n和current,不传则不处理,如果要传入需要指定顺序传入,先传n,n为需要保留几位小数,再传current为如果要加上货币前缀就直接传入!

  方法内部默认是标准金钱展现形式,3位一个',',就不再进行参数灵活控制了!

相关帖子

发表于 2016-12-31 15:40:56 | 显示全部楼层
js是要逆天的节奏js虽然不错,但是天生也是有缺陷,局限性。。。
使用道具 举报

回复

发表于 2017-1-1 15:34:44 | 显示全部楼层
貌似看过类似的文章恩,排版更清晰点就更好了
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部