格式化金额
2020-10-28 本文已影响0人
jluemmmm
好用的正则可视化工具 链接
jsapi 实现
Number.prototype.toLocaleString()
只能精确到小数点后三位
正则
str.replace(/\d{1,3}(?=(\d{3})+(?:\.\d)?$)/g, '$&,')
有点问题,会对小数点后面的正则进行匹配
(?:exp)
匹配 exp,不捕获匹配的文本,不给此分组分配组号
(?=exp)
匹配 exp前面的位置
function trans(str){
let partInt = str.match(/^\d+(?=\.)?/g)[0]
return str.replace(partInt, partInt.replace(/(\d)(?=(\d{3})+$)/g, '$1,'))
}

匹配exp, 不捕获匹配的文本,也不给此分组分配组号
函数实现
function toTrans(num){
debugger
let res = ''
let str = num.toString()
let partInt = str.split('.')[0]
let partFloat = str.split('.')[1]
while(partInt.length > 3) {
res = ',' + partInt.slice(-3) + res
partInt = partInt.slice(0, partInt.length - 3)
}
if(partInt) res = partInt + res
return partFloat ? res + '.' + partFloat : res
}