爱一个人是一回事,拥有一个人是另外一回事,爱上并拥有一个人,更是另外一回事。 蝴蝶,是什么,是希望,是真正的希望。
上一章简单介绍了JS计算字符串的字节数(十五),如果没有看过,请观看上一章。
一.金额千分位化
在前端展示,尤其是关于财务系统时,通常要把金额千分位处理,如1234567.234 需要转换成 1,234,567.23 。
这样的解决思路是:
- 数字有正负之分, 要把符号位单独拿出来。
- 将数字按照整数位和小数位分别进行处理, 整数位是倒着排序,隔3位加上个,
- 将数字通过parseFloat() 方法转换成小数,进行有效位数二位的处理。
- 需要将字符串转换成相应的数组形式。
二.转换
如传入的参数为: 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;
}
谢谢!!!