前言
做金融项目的时候,接触的大量数字字符串往往需要格式化显示,这里我写了一个demo,将字符串金额格式化,可以保留小数位数,可以添加货币标识前缀。
写在string的原型里面,需要格式化的时候直接格式化呗!
例:'123345.23123'.moneyFormatter(2,'¥')
输出: '¥123,345.23'
demo有注释,我就不多做说明了
我的demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script> //金额格式转化 String.prototype.moneyFormatter = function(n,current){ //n为保留的小数点位数,不传则不处理,current为前面加上的货币符号,必须是字符串,例'$','¥' var moneyStr = this; if(moneyStr.indexOf('.') == -1){ //如果不是小数 var len = moneyStr.length; //金额长度 var arr = []; //保存分割后的字符串 var num = Math.floor(len/3);//循环分割次数 var firstLen = len%3; var firstStr = moneyStr.substr(0,firstLen); //分割的起始第一部分 if(firstStr.length > 0){ arr.push(firstStr); } for(var i=0;i<num;i++){ //后续部分循环 arr.push(moneyStr.substr(i*3+firstLen,3)) } if(current && typeof(current) == 'string'){ return current + arr.join(','); //返回格式化后的字符串 }else{ return arr.join(','); //返回格式化后的字符串 } }else{ //如果是小数 if(n){ //如果传入了需要保留的小数位数 moneyStr = String(Number(moneyStr).toFixed(n)) } var moneyStr1 = moneyStr.split('.')[0]; //金额整数部分 var moneyStr2 = moneyStr.split('.')[1]; //金额小数部分 var len1 = moneyStr1.length; //金额整数部分长度 var arr1 = []; //保存整数部分分割后的字符串 var num1 = Math.floor(len1/3);//循环分割次数 var firstLen1 = len1%3; var firstStr1 = moneyStr.substr(0,firstLen1); //分割的起始第一部分 if(firstStr1.length > 0){ arr1.push(firstStr1); } for(var i=0;i<num1;i++){ //后续部分循环 arr1.push(moneyStr1.substr(i*3+firstLen,3)) } var newMoneyStr1 = arr1.join(','); //整数部分处理完毕 if(current && typeof(current) == 'string'){ return current + newMoneyStr1+'.'+moneyStr2; //返回格式化后的字符串 }else{ return newMoneyStr1+'.'+moneyStr2; //返回格式化后的字符串 } } } </script> </body> </html>
简介
接受两次参数,n和current,不传则不处理,如果要传入需要指定顺序传入,先传n,n为需要保留几位小数,再传current为如果要加上货币前缀就直接传入!
方法内部默认是标准金钱展现形式,3位一个',',就不再进行参数灵活控制了!