处理数值,为每三位数加一个逗号,兼容浮点型数值
以1234567.1234
和 12345678
为例
function addcomma(num = 0){ let temps = num.tostring().split('.'), //处理浮点数的情况,整数时会返回原数值 target = temps[0].split('').reverse(), //倒序 lastindex = target.length; return target.map((item,index) => { //第三个就增加一个',',要注意最后一个数字不添加 return ((index+1) % 3 === 0 && (index !== lastindex - 1)) ? (','+ item) : item; }) .reverse() //倒序回来 .join('') + (temps[1] ? '.' + temps[1] : ''); //如果是浮点数,就再加上小数部分 } addcomma(1234567.1234) //1,234,567.1234 addcomma(12345678) //12,345,678
function addcomma(num = 0){ let reg = num.tostring().indexof('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(\d{3})+$)/g; return num.tostring().replace(reg,'$1,'); } addcomma(1234567.1234) //1,234,567.1234 addcomma(12345678) //12,345,678
利用正则表达式来处理的思路:
右边的部分很好匹配:/(\d{3})+/
, 再加上开始算的符号,浮点数要加上 \.
(.
匹配除换行符之外的任何单个字符,加上\.
转义,就是匹配'.')。整数加上$
结束符。
左边的部分,必须依赖于右边的部分。比如说必须右边有三位,左边才会匹配成功,加一个','。就需要用到?=
正向肯定查找(x(?=y)
仅当x后面跟着y时才会匹配x)。(\d)(?=y)
y就是右边的部分。
再加上全局搜索的标志 g
,不然只会匹配一组,只加一个','。
如对本文有疑问, 点击进行留言回复!!
同事牛逼啊,写了个隐藏 bug,我排查了 3 天才解决问题!
【JavaScript笔记(一)】万丈高楼平地起 - 基本概念篇
轻松解决 org.apache.taglibs.standard.tlv.JstlCoreTLV 困惑
网友评论