在页面显示的时候,会有这样一种需求,300,200,88.22¥,其实这个工作对于一个工作量不大的页面来说,完全可以在前段处理,减轻服务端的压力,所以就写了这么个小东西,很实用的,还支持负数的哦,和符号前置或后置
var NumberFormat = function( places, seperator, unit, prepose ){
this.unit = unit ? unit : '';
this.bits = places ? places : 3;
this.prepose = prepose ? true : false;
this.seper = seperator ? seperator : ', ';
};
NumberFormat.prototype.format = function( source ){
if( source && $.isNumeric( source ) ){
var res,
ss = source.toString(),
sign = ss.charAt( 0 ),
len = this.bits,
_index = ss.indexOf( '.' ),
l = ss.length;
if( _index >= 0 )
l = _index;
if( !$.isNumeric( sign ) ){
l = l - 1;
ss = ss.substring( 1 );
}else{
sign = '';
}
if( len >= l )
return source;
var nsize = Math.ceil( l/len ),
na = new Array( nsize ),
index = 0;
for( var i = l; i > 0; i = i-len ){
if( i-len <= 0 ){
na[ index++ ] = ss.substring( i, 0 );
}else{
na[ index++ ] = ss.substring( i, i-len );
}
}
res = na.reverse().join( this.seper );
if( _index >= 0 )
res += ss.substring( _index + 1 );
if( this.prepose )
res = this.unit + res;
else
res = res + this.unit;
return sign + res;
}
};
/**
* places, seperator, unit, prepose 4个参数的意思:
*
* places: 几个分为一组,默认3个为一组
* seperator: 分隔符,默认为逗号分隔
* unit: 单位,默认为空
* prepose: 是否把单位前置,默认为不前置
*
*/
/**
* format()方法接受一个参数,需要格式化的数字或者数字字符串,会返回格式化后的结果
*/
下面是测试代码:
var nf = new NumberFormat();
var res = nf.format(32342342342342);
console.log(res);//32, 342, 342, 342, 342
res = nf.format(-32342342342342);
console.log(res);//-32, 342, 342, 342, 342
nf = new NumberFormat(4, '-', '$');
res = nf.format(-32342342342342);
console.log(res);//-32-3423-4234-2342$
res = nf.format(32342342342342);
console.log(res);//32-3423-4234-2342$