js实现数字转换为逗号分隔的格式化字符串//注意:数字与字符的转换会丢失多余的尾部0('123.010'<->123.01,'123.00'<->123)
var NumberFormat = {
//按照每3位逗号分隔,字符串截⼦串法
toCommaFormat: function(number){
//如果是数字,则转换为字符串
if(typeof number == 'number'){
number = String(number)
}
var pointIndex = number.lastIndexOf('.'); //获取⼩数点的位置
var hasDecimal = pointIndex != -1; //检查是否包含⼩数点
var numberInteger = hasDecimal ? number.substring(0, pointIndex) : number; //获取数的整数部分
var length = numberInteger.length;
if(length > 3){
var numberFormat = '';
//从尾部往前截⼦串拼接
for(var i= numberInteger.length; i> 0; i=i-3){
//当前⼦串+之前拼接好的⼦串(因:substring(0,1) == substring(-2,1),故⽆需判断i-3为负数的情况)
numberFormat = numberInteger.substring(i-3,i) + (numberFormat==''?'':(','+numberFormat));
}
//整数部分+⼩数部分
var numberDecimal = hasDecimal ? number.substring(pointIndex) : '';
return numberFormat + numberDecimal;
}else{
//⽆需分隔,直接返回
return number;
}
},
//按照每3位逗号分隔,余数拼接法(缺点:有位数限制)
toCommaFormat2: function(number){
//如果是数字,则转换为字符串
if(typeof number == 'number'){
number = String(number)
}
var pointIndex = number.lastIndexOf('.'); //获取⼩数点的位置
var hasDecimal = pointIndex != -1; //检查是否包含⼩数点
var numberInteger = hasDecimal ? number.substring(0, pointIndex) : number; //获取数的整数部分
var length = numberInteger.length;
if(length > 3){
var numberFormat = '';
var remainder; //余数
var quotient; //商
while(true){
quotient = Math.floor(Number(numberInteger)/1000); //商标识还需不需要进⼀步分隔
remainder = Number(numberInteger)%1000; //余数即是分隔下来的⼦串
numberFormat = String(remainder) + (numberFormat == ''?'':(','+numberFormat)); //当前余数拼接之前的余数if(quotient == 0){
//商为0,计算完毕
break;
}
//商作为被除数,进⼀步分隔
numberInteger =  quotient;
}
//整数部分+⼩数部分
var numberDecimal = hasDecimal ? number.substring(pointIndex) : '';
return numberFormat + numberDecimal;
}else{
//⽆需分隔,直接返回
return number;
}
},
//正则式替换,来⾃⽹友
format_number:function(nStr ){
nStr += '';  //数字转换为字符
x = nStr.split('.');  //按照⼩数点分隔
x1 = x[0];  //整数部分
x2 = x.length > 1 ? '.' + x[1] : '';  //⼩数部分
var rgx = /(\d+)(\d{3})/;  //正则式定义
while (st(x1)) {  //正则式匹配
x1 = x1.replace(rgx, '$1' + ',' + '$2');  //正则式替换
}
return x1 + x2;
}
};
总结:js 正则替换
1.推荐使⽤字符串截⼦串的⽅式进⾏格式化,这样没有长度限制。
2.调⽤函数传参最好使⽤字符串类型,这样才不会丢失尾部的0。
3.⽹友的正则式法⾮常简洁漂亮,还有字符串分隔成单字符反序拼接法等。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。