一.金额千分位化
在前端展示,尤其是关于财务系统时,通常要把金额千分位处理,如1234567.234 需要转换成 1,234,567.23 。
这样的解决思路是:
1.数字有正负之分, 要把符号位单独拿出来。
2.将数字按照整数位和小数位分别进行处理, 整数位是倒着排序,隔3位加上个,
3.将数字通过parseFloat() 方法转换成小数,进行有效位数二位的处理。
4.需要将字符串转换成相应的数组形式。
二.转换
如传入的参数为: 12345678.234 的形式。
function number(num){ var noNegative = true; //默认是正值。 var s=(num + "").replace(/[^\d\.-]/g, ""); //把数字和. 换成空格,也就是前面均加上"" //此时,转换后的值为 12345678.234 数字与数字之间, .之间,均有"" s=parseFloat(s).toFixed(2); //先转换成小数,后四舍五入两位小数,为12345678.23 s=s+""; //转换成字符串 if(parseFloat(s) < 0){ //是负数 s = Math.abs(s).toFixed(2) + ""; //先转换成正数,然后取两位小数 noNegative = false; //标志位为负数 } var zheng=s.split(".")[0]; //取出前面的整数值。 为12345678 var zhengArr=zheng.split("").reverse(); //先按照""进行拆分,后进行反转。 // 拆分时,为1,2,3,4,5,6,7,8 反转后为8,7,6,5,4,3,2,1 var dian=s.split(".")[1]; //取出小数部分,为23 var t=""; for(var i=0;i<zhengArr.length;i++){ if(i%3==2&&i!=zhengArr.length-1){ //为第三位,并且并不是最后了。如123456时,6并不加, t+=zhengArr[i]+","; }else{ t+=zhengArr[i]+""; //加上空格 } } //此时,t的值为876,543,21, 反转后为12,345,678 //进行拼接, 符号位+ 反转后的数字+小数点+小数部分 var value= (noNegative?"":"-")+t.split("").reverse().join("") +"."+dian; // 输出的值,就是12,345,678.23 }
写成相应的方法为: formatMoney
var formatMoney=function(s){ var noNegative = true; s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(2) + ""; if(parseFloat(s) < 0){ s = Math.abs(s).toFixed(2) + ""; noNegative = false; } var l = s.split(".")[0].split("").reverse(), r = s.split(".")[1]; t = ""; for(i = 0; i < l.length; i++) { if(i%3==2&&i!=l.length-1){ t+=l[i]+","; }else{ t+=l[i]+""; //加上空格 } } return (noNegative?"":"-") + t.split("").reverse().join("") + "." + r; }
三. 普通简单的方式,利用数组转换
var formatMoney=function(s){ var noNegative = true; //默认是正值。 s=parseFloat(s+"").toFixed(2); //先转换成小数,后四舍五入两位小数,为12345678.23 s=s+""; //转换成字符串 if(parseFloat(s) < 0){ //是负数 s = Math.abs(s).toFixed(2) + ""; //先转换成正数,然后取两位小数 noNegative = false; //标志位为负数 } var zheng=s.split(".")[0]; //取出前面的整数值。 为12345678。 var dian=s.split(".")[1]; //取出小数部分,为23 //将整数部分,利用字符串的charAt() 方法,转换成数组。 var zhengArr=[]; for(var i=0;i<zheng.length;i++){ zhengArr.push(zheng.charAt(i)); //放入的值为 1,2,3,4,5,6,7,8 } zhengArr=zhengArr.reverse(); //反转后为8,7,6,5,4,3,2,1 var t=""; for(var i=0;i<zhengArr.length;i++){ if(i%3==2&&i!=zhengArr.length-1){ //为第三位,并且并不是最后了。如123456时,6并不加, t+=zhengArr[i]+","; }else{ t+=zhengArr[i]+""; //加上空格 } } //此时,t的值为876,543,21, 反转后为12,345,678 return (noNegative?"":"-")+t.split("").reverse().join("") +"."+dian; }
去除相应的注释之后为:
var formatMoney=function(s){ var noNegative = true; //默认是正值。 s=parseFloat(s+"").toFixed(2); s=s+""; //转换成字符串 if(parseFloat(s) < 0){ //是负数 s = Math.abs(s).toFixed(2) + ""; noNegative = false; } var zheng=s.split(".")[0]; var dian=s.split(".")[1]; //将整数部分,利用字符串的charAt() 方法,转换成数组。 var zhengArr=[]; for(var i=0;i<zheng.length;i++){ zhengArr.push(zheng.charAt(i)); } zhengArr=zhengArr.reverse(); var t=""; for(var i=0;i<zhengArr.length;i++){ if(i%3==2&&i!=zhengArr.length-1){ //为第三位,并且并不是最后了。如123456时,6并不加, t+=zhengArr[i]+","; }else{ t+=zhengArr[i]+""; //加上空格 } } return (noNegative?"":"-")+t.split("").reverse().join("") +"."+dian; }
谢谢!!!