b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

分享JS实现的4种数字千格式设置方法

电脑杂谈  发布时间:2020-03-21 03:21:37  来源:网络整理

jsp 数字格式化_jsp页面格式化数字_jsp页面时间格式化

所谓的千位数形式,即从一位开始,在每三位之间添加一个逗号. 例如“ 10,000”. 为了满足这一需求,我首先编写了这样的函数:

复制代码,代码如下:

//方法1

函数到千(num){

var结果= [],计数器= 0;

num =(num || 0).toString(). 分割('');

for(var i = num.length-1; i> = 0; i--){

计数器++;

result.unshift(数字[i]);

if(!(%% 3)&& i!= 0){result.unshift(',');}

}

return result.join('');

}

方法一的执行是将数字转换为字符串并将其分解为数组,然后从头开始,将数组的元素一一插入到新数组的开头(结果). 每次插入元素时jsp页面格式化数字,都会对计数器计数(加1). 当计数器为3的倍数时,将插入逗号,但是请注意,开头(当i为0时)不需要逗号. 最后,通过调用新数组的join方法获得结果.

方法1相对清晰易懂,并且已经在项目中使用了一段时间. 但是直觉告诉我它的性能不好.

方法一的方法二-字符串版本

复制代码,代码如下:

//方法二

函数到千(num){

jsp页面格式化数字_jsp 数字格式化_jsp页面时间格式化

var结果='',计数器= 0;

num =(num || 0).toString();

for(var i = num.length-1; i> = 0; i--){

计数器++;

result = num.charAt(i)+结果;

if(!(计数器%3)&& i!= 0){结果=','+结果;}

}

返回结果;

}

方法2是方法1的改进版本. 它不会将字符串分成数组,并且始终对字符串进行操作.

方法3-在循环末尾匹配三个数字

复制代码,代码如下:

//方法三

函数到千(num){

var num =(num || 0).toString(),re = / \ d {3} $ /,结果='';

同时(重新测试(数字)){

result = RegExp.lastMatch +结果;

if(num!== RegExp.lastMatch){

result =','+结果;

jsp页面时间格式化_jsp 数字格式化_jsp页面格式化数字

num = RegExp.leftContext;

}其他{

num ='';

休息;

}

}

if(num){结果= num +结果;}

返回结果;

}

方法3是完全不同的算法. 它在正则表达式的末尾循环显示三个数字. 每次匹配时,它将逗号和匹配的内容插入到结果字符串的开头,然后匹配目标(数字). 分配尚未匹配的值(RegExp.leftContext). 另外,请注意:

1. 如果位数是3的倍数,则最后一个匹配项必须是三位数,但是前三位数之前不需要逗号;

2. 如果位数不是3的倍数,则num变量肯定会剩下1或2位数字. 循环之后,必须将其余数字插入结果字符串的开头.

尽管方法3减少了循环次数(一次处理三个字符),但使用了正则表达式,这在一定程度上增加了消耗.

方法3的方法4字符串版本

复制代码,代码如下:

//方法4

函数到千(num){

var num =(num || 0).toString(),结果='';

while(num.length> 3){

jsp页面时间格式化_jsp页面格式化数字_jsp 数字格式化

result =','+数字切片(-3)+结果;

num = num.slice(0,num.length-3);

}

if(num){结果= num +结果;}

返回结果;

}

实际上,截断最后三个字符的功能可以通过字符串类型的slice,substr或substring方法完成. 这样可以避免使用正则表达式.

方法5: 分组和合并方法

复制代码,代码如下:

//方法5

函数到千(num){

var num =(num || 0).toString(),temp = num.length%3;

开关(温度){

情况1:

num ='00'+ num;

休息;

情况2:

num ='0'+ num;

休息;

jsp页面格式化数字_jsp 数字格式化_jsp页面时间格式化

}

返回数字匹配(/ \ d {3} / g).join(','). 替换(/ ^ 0 + /,'');

}

首先将位数乘以3的倍数,通过正则表达式将其分成每三位数的组,通过join方法添加逗号,最后从补码中删除零.

方法6-惰性方法

复制代码,代码如下:

//方法6

函数到千(num){

返回(num || 0).toString(). replace(/(\ d)(?=(?: \ d(3})+ $)/ g,'$ 1,');

}

我一直认为可以通过替换正则表达式来完成这种格式设置,但是它需要使用断言和其他表达式,但是我对这部分并不熟悉. Google有点,确实找到了这样的正则表达式,估计这是最短的代码实现.

测试结果

5000次执行数字所花费的时间(ms)

方法一方法二方法三方法四方法五方法六

10000

100000

方法1和方法2的强烈对比表明,字符串运算的效率远高于数组运算的效率;方法6的测试结果告诉我们,代码的长度与性能无关. 方法4的整体性能是最好的(但是当num为100时为什么性能会降低,这真的很难理解),主要原因是:

1. 对比方法一和二,每次操作3个字符而不是1个字符,减少循环次数;

2. 比较方法三,五和六,而无需使用正则表达式jsp页面格式化数字,从而减少了消耗.

最后,我选择了方法4作为最终的优化解决方案. 读者可以评论更好的实现方法或改进.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-146727-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...